即使在Adapter上调用notifyDataSetChanged()之后,导航抽屉Listview也不会更新新项目

时间:2014-03-28 13:17:04

标签: android android-listview android-adapter

我在导航抽屉上渲染了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()之外我还需要做什么来以编程方式触发这样的刷新?

1 个答案:

答案 0 :(得分:1)

最佳方法是使用ArrayAdapter。因此,当您要将新项目添加到列表中时,只需拨打adapter.add("your object"),即可为所添加的项目调用getView()

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