0

我从这里使用部分列表视图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());
}}

好像不行,有大神帮忙吗?

4

2 回答 2

1
  1. 确保您使用了 Samehashmapadapter对象,ListView并且hashmap在创建对象时使用了该adapter对象。
  2. 确保adapter.notifyDatasetChanged()被调用,在那里放一些日志
  3. 调用 notifyDatasetChanged() 后打印 Log 中的 HashMap 对象值,并检查 ListView 和 Log 中的项目是否相同
  4. 只有当HashMap中的数据发生变化notifyDatasetChanged()时才能显示效果,如果它保持为prev,那么您无法确定它是否已被调用。
  5. 看你的代码,我想这部分代码没有问题
于 2012-06-28T13:48:29.507 回答
0

我不完全了解您通过调用 notifyDataSetChange() 想要达到的目的。

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

如果那是您想要做的,那么使用它 - 您需要做的很简单:只需调用:

adapter.notifyDataSetChanged();

就是这样:)。没有其他的。

于 2012-06-28T13:24:29.523 回答