利用notifyDataSetChanged()方法实现启动活动之后更新 ListView

来源:互联网 发布:宜人贷淘宝验证不了 编辑:程序博客网 时间:2024/06/05 16:53

启动活动之后更新 ListView

使用 ListView 的时候,在活动启动之后,如果 ListView 的数据有一些变更,该如何将变更之后的数据显示在界面上,要用到 adapternotifyDataSetChanged() 方法,但是在数据改变之后直接 adapter.notifyDataSetChanged(); 却是更新不出来的,必须要修改一些地方,先清除 list 中的数据,再加载更新后的数据,在使用这个方法。

private List<???> list = new ArrayList<>();private ListView listView = (ListView)findViewById(R.id.listView);private ListAdapter adapter = null;if (list.size() == 0) {    //加载所有    ******    adapter = new ListAdapter(list,???);    listView.setAdapter(adapter);} else {    //加载变更之后的数据    list.clear();                    //先清除 List 中的数据    list.addAll(***);                //然后在加载更新后的所有的数据    adapter.notifyDataSetChanged();  //更新数据}

为什么不能直接用哪个方法?第一次 adapter 加载 list 的时候 adapter 保存的 list 指向的是一开始 List 的引用,在更新了数据之后,list 指向了新的 List 引用,但是 adapter 保存的 list 指向的还是原来的引用,因此在调用 notifyDataSetChanged() 时,adapter 会跟据原来的引用去更新,因此当然还是原来的结果,不会进行更新。进行以上操作之后, adapter 保存的是指向的是新的 List 的引用,就更新了。

原创粉丝点击