2016年8月14日 开发记录
话说这个问题已经困扰我很久了,我以为只要数据变了,调用adapter的notifyDataSetChanged就会更新列表,最近在做一个小应用,想着动态更新列表,数据是变了,但就是没有把更新的数据显示出来。为什么是这样,以下是我总结的一些原因:
1、数据源没有更新,调用notifyDataSetChanged无效。
2、数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。
3、数据源更新了,但是adpter没有收到消息通知,无法动态更新列表。
首先肯定要初始化listView,为其setAdapter:
listView = (ListView)findViewById(R.id.list_view);
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, dataList);
listView.setAdapter(adapter);在刷新方法中,我天真地以为只要这样写就行了:
dataList.clear();
dataList=myDaatebase.loadDateList();//我的返回新的dataList方法
runRecordAdapter.notifyDataSetChanged();其实这么写是不对的,第二行中改变了dataList的引用,adapter的数据源已经被clear()掉了,所以不能正确刷新。修改之后,能正确刷新数据:dataList.clear();
dataList.addAll(myDaatebase.loadDateList());//我的返回新的dataList方法
runRecordAdapter.notifyDataSetChanged();
转载请注明原文地址: https://ju.6miu.com/read-1298004.html