具有notifyDataSetChanged的自定义适配器无法正常工作

时间:2012-06-28 13:21:09

标签: android

我使用section listview从这里开始 http://lalit3686.blogspot.com/2012/05/sectionadapter.html

但我如何实施adapter.notifyDataSetChanged()

添加侦听器以更新列表视图数据:

mListView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Toast.makeText(SectionAdapterActivity.this, ""+position+"", Toast.LENGTH_SHORT).show();
            test();

        }
    });

我只为更改/更新值添加新功能(仅测试):

public void test()
{
    hashMap.clear();

    for (int i = 0; i < 3; i++) {
        hashMap.put("Mail", String.valueOf(1100 + i), 1);
    }

    for (int j = 0; j < 4; j++) {
        hashMap.put("Case", String.valueOf(2100 + j), 15);
    }
    for (int j = 0; j < 5; j++) {
        hashMap.put("File", String.valueOf(10000 + j), 20);
    }

    mListView.invalidate();
    mListView.invalidateViews();
    adapter.notifyDataSetChanged(); 

    Log.e("dada", hashMap.toString());
}}

似乎不起作用,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

  1. 确保您为hashmap使用了相同的adapterListView个对象,并在创建hashmap对象时使用了adapter个对象。
  2. 确保已调用adapter.notifyDatasetChanged()在那里添加一些日志
  3. 调用notifyDatasetChanged()后在Log中打印HashMap对象值,并检查ListView和Log中的项是否相同
  4. notifyDatasetChanged()的效果只有在HashMap中的数据发生变化时才会显示 如果它保持为prev,则无法确定是否已被调用。
  5. 查看您的代码,我认为代码的这部分没有问题

答案 1 :(得分:0)

我不清楚你要通过调用notifyDataSetChange()来实现什么。

此方法仅在您更改已经创建的适配器使用的逻辑数据集合/数据库后生效。在这种情况下 - 它将导致使用新数据更新列表

如果你想做什么,那么使用它 - 你需要做的很简单:只需致电:

adapter.notifyDataSetChanged();

就是这样:)。没别的。