国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ListView 局部刷新

2019-11-09 14:57:50
字體:
來源:轉載
供稿:網友

轉載請注明出處:http://blog.csdn.net/darling_R/article/details/54946362 本文出自:哎呀小嘿的博客

在軟件里面,list列表幾乎是必不可少的,但是有時候需要刷新列表,而notifyDataSetChanged()又是刷新全部數據,性能就會相對下降,為了解決定向刷新某一條數據,特意寫了瓷片文章,希望能對一些需要的人有幫助,廢話不多說,直接上代碼。

這里是MainActivity:

public class MainActivity extends AppCompatActivity { PRivate ArrayList<MyListItem> list = null; private ListView lv; private MyListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intitData(); lv = (ListView) findViewById(R.id.listView1); adapter = new MyListAdapter(list, getapplicationContext()); adapter.setListView(lv); lv.setAdapter(adapter); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 獲取listview中點擊item的數據 MyListItem item = (MyListItem) parent.getItemAtPosition(position); Log.i("eee", item.getData() + " == " + item.getPosition()); // 更新數據 item.setData("update item " + position); // 更新界面 adapter.updateItemData(item); } }); } /** * 初始化數據 */ private void intitData() { list = new ArrayList<>(); for (int i = 0; i < 20; i++) { MyListItem item = new MyListItem(); item.setData("item " + i); item.setPosition(i); list.add(item); } }}

關鍵代碼還是 adapter里面的:

public class MyListAdapter extends BaseAdapter { /** * listview中的數據集 */ private ArrayList<MyListItem> mDataList; private Context mContext; private ListView mListView; public MyListAdapter(ArrayList<MyListItem> list, Context cont) { this.mDataList = list; this.mContext = cont; } /** * 設置listview對象 * * @param lisv */ public void setListView(ListView lisv) { this.mListView = lisv; } /** * update listview 單條數據 * * @param item 新數據對象 */ public void updateItemData(MyListItem item) { Message msg = Message.obtain(); int ids = -1; // 進行數據對比獲取對應數據在list中的位置 for (int i = 0; i < mDataList.size(); i++) { if (mDataList.get(i).getPosition() == item.getPosition()) { ids = i; } } msg.arg1 = ids; // 更新mDataList對應位置的數據 mDataList.set(ids, item); // handle刷新界面 han.sendMessage(msg); } @SuppressLint("HandlerLeak") private Handler han = new Handler() { public void handleMessage(android.os.Message msg) { updateItem(msg.arg1); } }; /** * 刷新指定item * * @param index item在listview中的位置 */ private void updateItem(int index) { if (mListView == null) { return; } // 獲取當前可以看到的item位置 int visiblePosition = mListView.getFirstVisiblePosition(); // 如添加headerview后 firstview就是hearderview // 所有索引+1 取第一個view // View view = listview.getChildAt(index - visiblePosition + 1); // 獲取點擊的view View view = mListView.getChildAt(index - visiblePosition); TextView txt = (TextView) view.findViewById(R.id.textView1); // 獲取mDataList.set(ids, item);更新的數據 MyListItem data = (MyListItem) getItem(index); // 重新設置界面顯示數據 txt.setText(data.getData()); } @Override public int getCount() { return mDataList.size(); } @Override public Object getItem(int position) { return mDataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, null); } TextView txt = (TextView) convertView.findViewById(R.id.textView1); txt.setText(mDataList.get(position).getData()); return convertView; }

代碼里面注釋寫的都很清楚了,這里就不在贅述了。 數據類:

public class MyListItem { /** * 數據id */ private int dataId; /** * 數據 */ private String data; public int getPosition() { return dataId; } public void setPosition(int position) { this.dataId = position; } public String getData() { return data; } public void setData(String data) { this.data = data; } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦北县| 丰都县| 北流市| 广昌县| 琼海市| 县级市| 缙云县| 连城县| 临夏市| 广宁县| 嘉善县| 大关县| 闸北区| 巴彦县| 陆河县| 金阳县| 家居| 鹤岗市| 涿鹿县| 南充市| 新干县| 邢台市| 贡觉县| 定襄县| 当涂县| 娱乐| 肇东市| 调兵山市| 钟山县| 青河县| 襄垣县| 泽库县| 榕江县| 邛崃市| 锦州市| 余干县| 望城县| 哈密市| 丹江口市| 观塘区| 闻喜县|