更改ArrayAdapter中的项目数

时间:2014-02-11 06:28:51

标签: android android-arrayadapter

在我的Android应用中,我有一个最初显示许多项目的列表视图。然后我想用一组新项目重新加载listview。通常,我这样做是为了最初创建listview项目:

adapterDirectories = new DirectoryAdapter(context, R.layout.shop_directory_row, directories);
lvDirectory.setAdapter(adapterDirectories);

我的适配器看起来像这样:

  private class DirectoryAdapter extends ArrayAdapter<ShopDirectoryInfo>
  {
    @SuppressWarnings("unchecked")
    public DirectoryAdapter(Context context, int textViewResourceId, @SuppressWarnings("rawtypes") ArrayList items)
    {
      super(context, textViewResourceId, items);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {

当我想要更新项目时,我会这样做:

directories = getDirectories();

ArrayAdapter<ShopDirectoryInfo> adapter = (ArrayAdapter<ShopDirectoryInfo>) lvDirectory.getAdapter();
adapter.notifyDataSetChanged();

尽管getDirectories返回一组完全不同的数据,但最终会将新项目添加到现有项目中。我不知道为什么新项目被添加到现有集合而不是替换旧集合。在没有旧数据的情况下显示新数据的唯一方法是重新创建适配器而不是使用notifyDataSetChanged。有没有办法在不调用notifyDataSetChanged的情况下获得更新?

3 个答案:

答案 0 :(得分:1)

请试试这个

adapterDirectories.notifyDataSetChanged();
lvDirectory.invalidate();

答案 1 :(得分:0)

在再次设置适配器之前,您应该清除之前的项目。

if(adapter!= null) {
    adapter.clear();
    adapter.notifyDataSetChanged();
}

答案 2 :(得分:0)

这有效:

ArrayAdapter<ShopDirectoryInfo> adapter = (ArrayAdapter<ShopDirectoryInfo>) lvDirectory.getAdapter();
adapter.clear();

directories = getDirectories();
adapter.addAll(directories);
adapter.notifyDataSetChanged();

关键是清除后使用addAll。