【问题标题】:Navigation Drawer Listview does not update new items even after calling notifyDataSetChange() on Adapter即使在适配器上调用 notifyDataSetChange() 后,导航抽屉列表视图也不会更新新项目
【发布时间】:2014-03-28 13:17:03
【问题描述】:

我在导航抽屉上呈现了一个ListView。 列表视图的内容由我的自定义适配器(派生自 BaseAdapter)提供,它一个接一个地附加两个数组,如下所示

*@Override
public int getCount() {
  return array1.size() + array2.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  if (position < array1.size()) 
     // return a view  generated from first array
  }
  else {
     // returns a view generated from the second array
  }
}

ListView是这样连接到适配器的

mDrawerList.setAdapter(adapter);

最初在onCreate()之后,array2为空;只有 array1 在 ListView 上正确填充和呈现。之后,稍微延迟后,后台线程填充array2,我希望新项目显示在列表中。为此,我从主线程向适配器发出notifyDataSetChanged()。不幸的是,这不会使用第二个数组中的新项目更新 ListView UI。在调试这个时,我发现我的 getCount() 方法被调用,它正确地返回了组合数组大小计数,但是 getView() 方法根本没有被调用。我确保 ListView 不会被其他重叠的小部件隐藏。

奇怪的是,一旦我点击ListView,它就会根据需要使用新添加的项目进行刷新。除了调用 notifyDataSetChanged() 以编程方式触发此类刷新之外,我还需要做什么?

【问题讨论】:

    标签: android android-listview android-adapter


    【解决方案1】:

    最好的方法是使用 ArrayAdapter 。因此,当您有新项目要添加到列表中时.. 只需调用 adapter.add("your object"),它将负责为添加的项目调用 getView()

    注意:这会将项目添加到列表视图中的最后一项。

    【讨论】:

    • 嗨 Libin,感谢您的回答,但 Array Adapter 旨在将单个项目显示到每一行的 textview 中,正如此构造函数签名所说,ArrayAdapter(Context context, int resource, int textViewResourceId, T [] 个对象),而在我的情况下,我需要包含多个项目的行,例如两个图像,一个文本项
    • 没有。您可以为每一行创建任意数量的项目。创建一个自定义的 ArrayaAdapter 并 Override getView()。这很容易做到。
    猜你喜欢
    • 2015-09-15
    • 2015-08-17
    • 1970-01-01
    • 2023-02-03
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多