notifyDataSetChanged()不更新listview

时间:2014-02-06 14:23:25

标签: android listview

我正在从我的后台方法更新我的listview:

 runOnUiThread(new Runnable() {
            public void run() {
                /**
                 * Updating parsed JSON data into ListView
                 * */
                BaseAdapter adapter = new SimpleAdapter(
                        AllProductsActivity.this, productsList,
                        R.layout.list_item, new String[] { TAG_PID,
                                TAG_NAME},
                        new int[] { R.id.pid, R.id.name });
                // updating listview
                if(getListView().getAdapter() == null){ //Adapter not set yet.
                     setListAdapter(adapter);
                     Log.v("ha", "bla");
                }
                else
                { //Already has an adapter
                    adapter.notifyDataSetChanged();
                }
            }
        });

执行此代码:
- 首次加载
-on滚动以加载更多内容,我在其中调用adapter.notifyDataSetChanged(),但没有成功。

如何更新我的代码,以便我可以使用notifydatasetchanged并将新数据添加到当前数据。

我的整个代码:http://pastebin.com/cWmday3i感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

编写代码的方式应始终调用setListAdapter,因为每次执行runOnUhThread中的runnable时,都会创建一个新的Adapter,可能带有一个新的数据集。 notifyDataSetChangedNotifyDataSetChanged之间的唯一区别是第二个不属于Android的API

答案 1 :(得分:1)

如果您不先更改数据,

notifyDataSetChanged()将不会执行任何操作。在else块中,您需要在调用notifyDataSetChanged()之前将JSON结果传输到现有适配器。

此外,if块上方的代码应移至if块内,因为它在if块之外未使用。这种模棱两可可能导致你的疏忽。

答案 2 :(得分:-1)

将下面的行放在一边runOnUiThread

 adapter.notifyDataSetChanged();

答案 3 :(得分:-1)

试试这个它会起作用。

  

getListView().getAdapter().notifyDataSetChanged()