android adapter.notifyDataSetChanged()失效

limz2004 2016-09-23 05:22:31
编写了一个GridView更新的程序,但是发现adapter.notifyDataSetChanged()没有把更新后的数据加载到gridview中
部分代码如下:
我的子线程的操作:
private void getVisitorViewData() {
new Thread(new Runnable() {
@Override
public void run() {
Utils.copyFilesFassets(getActivity(), "test", Constant.FOLDER_NAME, Constant.TYPE_VISITOR);//这个是将图片保存到外存中
//发消息给主线程,请求更新gridview
Message message = new Message();
message.arg1 = Constant.MESSAGE_SAVE_FILE_FINISH;
mHandler.sendMessage(message);
}
}).start();
}
---------------------------------------------------------------------------------------------------------------------------------------------------------
Handler代码如下:
private Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.d("mingzhu", "---- handleMessage ----");
switch (msg.arg1) {
case Constant.MESSAGE_SAVE_FILE_FINISH:
lists = DbUtils.getMainViewBeans(getActivity(), Constant.TYPE_VISITOR);
Log.d("mingzhu", "get list size : " + lists.size());
for(MainViewBean bean : lists) {
Log.d("mingzhu", "--------------------------");
Log.d("mingzhu", "name : " + bean.getName());
Log.d("mingzhu", "path : " + bean.getPath());
Log.d("mingzhu", "index : " + bean.getIndex());
}
if(adapter != null) {
Log.d("mingzhu", " 1 ");
adapter.notifyDataSetChanged();
} else {
Log.d("mingzhu", " 2 ");
adapter = new VisitorGirdViewAdapter(VisitorFragment.this.getActivity(), lists);
gridview.setAdapter(adapter);
}
break;

default:
break;
}
}
};
---------------------------------------------------------------------------------------------------------------------------------------------------------
打印出的Log如下:
09-23 16:49:11.308: D/mingzhu(2531): lists size : 0
09-23 16:49:11.312: D/mingzhu(2531): --- initGridView ---
09-23 16:49:11.527: D/mingzhu(2531): ---- handleMessage ----
09-23 16:49:11.529: D/mingzhu(2531): get list size : 5
09-23 16:49:11.530: D/mingzhu(2531): --------------------------
09-23 16:49:11.530: D/mingzhu(2531): name : ceshi1
09-23 16:49:11.530: D/mingzhu(2531): path : /storage/emulated/0/Gunqu/ceshi1.jpg
09-23 16:49:11.530: D/mingzhu(2531): index : 1
09-23 16:49:11.530: D/mingzhu(2531): --------------------------
09-23 16:49:11.530: D/mingzhu(2531): name : ceshi2
09-23 16:49:11.530: D/mingzhu(2531): path : /storage/emulated/0/Gunqu/ceshi2.png
09-23 16:49:11.530: D/mingzhu(2531): index : 2
09-23 16:49:11.530: D/mingzhu(2531): --------------------------
09-23 16:49:11.530: D/mingzhu(2531): name : ceshi3
09-23 16:49:11.530: D/mingzhu(2531): path : /storage/emulated/0/Gunqu/ceshi3.jpg
09-23 16:49:11.530: D/mingzhu(2531): index : 3
09-23 16:49:11.530: D/mingzhu(2531): --------------------------
09-23 16:49:11.530: D/mingzhu(2531): name : ceshi4
09-23 16:49:11.530: D/mingzhu(2531): path : /storage/emulated/0/Gunqu/ceshi4.jpg
09-23 16:49:11.530: D/mingzhu(2531): index : 4
09-23 16:49:11.530: D/mingzhu(2531): --------------------------
09-23 16:49:11.531: D/mingzhu(2531): name : ceshi5
09-23 16:49:11.531: D/mingzhu(2531): path : /storage/emulated/0/Gunqu/ceshi5.jpg
09-23 16:49:11.531: D/mingzhu(2531): index : 5
09-23 16:49:11.531: D/mingzhu(2531): 1
...全文
534 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq840727854 2016-09-27
  • 打赏
  • 举报
回复
lists 每次 应该都是 new了 一个把 数据来的 时候 你 list.clear 下 再重新 addAll 试试把
头发还没秃a 2016-09-27
  • 打赏
  • 举报
回复
你都没改变adapter里面的数据
tcmakebest 2016-09-26
  • 打赏
  • 举报
回复
list 数据源只能使用同一个,不能换掉.
limz2004 2016-09-26
  • 打赏
  • 举报
回复
我尝试用set重新把list数据加载到adapter里面,然后gridview再setAdapter,还是一样失败了
LoveWyf_ 2016-09-24
  • 打赏
  • 举报
回复
调用notify那个方法前,你的list和你调用setAdapter中传入的list并不是同一个,当然会失效了,不行你打印一下list的hash值。你可以直接调用set而不是notify。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧