即使在适配器上调用notifyDataSetChange()之后,导航抽屉列表视图也不会更新新项



我在导航抽屉上渲染了一个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()触发这样的刷新编程?

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

最新更新