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

首頁 > 學院 > 開發(fā)設計 > 正文

ListView 局部刷新

2019-11-09 16:10:21
字體:
供稿:網(wǎng)友

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

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

這里是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的數(shù)據(jù) MyListItem item = (MyListItem) parent.getItemAtPosition(position); Log.i("eee", item.getData() + " == " + item.getPosition()); // 更新數(shù)據(jù) item.setData("update item " + position); // 更新界面 adapter.updateItemData(item); } }); } /** * 初始化數(shù)據(jù) */ 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中的數(shù)據(jù)集 */ 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 單條數(shù)據(jù) * * @param item 新數(shù)據(jù)對象 */ public void updateItemData(MyListItem item) { Message msg = Message.obtain(); int ids = -1; // 進行數(shù)據(jù)對比獲取對應數(shù)據(jù)在list中的位置 for (int i = 0; i < mDataList.size(); i++) { if (mDataList.get(i).getPosition() == item.getPosition()) { ids = i; } } msg.arg1 = ids; // 更新mDataList對應位置的數(shù)據(jù) 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);更新的數(shù)據(jù) MyListItem data = (MyListItem) getItem(index); // 重新設置界面顯示數(shù)據(jù) 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; }

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

public class MyListItem { /** * 數(shù)據(jù)id */ private int dataId; /** * 數(shù)據(jù) */ 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; } }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 衡东县| 仲巴县| 吉安市| 仪陇县| 和平区| 铁力市| 邵阳市| 伊宁县| 霍城县| 祁东县| 长葛市| 罗城| 行唐县| 石柱| 湘西| 临武县| 吉首市| 大新县| 威海市| 玛纳斯县| 无为县| 晋中市| 石阡县| 临汾市| 昭通市| 当雄县| 张家港市| 德令哈市| 唐山市| 年辖:市辖区| 忻州市| 麻阳| 长白| 忻城县| 郎溪县| 霍城县| 五峰| 正镶白旗| 广东省| 安化县| 青阳县|