如何刷新一个Android列表视图后添加/删除动态数据?


当前回答

在“dataArray”中添加/删除动态数据后:

如果你使用ArrayAdapter

adapter.notifyDataSetChanged();

如果你使用了扩展ArrayAdapter的customAdapter

adapter.clear();
adapter.addAll(dataArray);
adapter.notifyDataSetChanged();

如果你使用一个扩展BaseAdapter的customAdapter

adapter.clear();
adapter.getData().addAll(dataArray);
adapter.getData().notifyDataSetChanged();

其他回答

当使用SimpleCursorAdapter时,可以在适配器上调用changeCursor(newCursor)。

我有一个数组列表,我想把它显示在列表视图中。ArrayList包含mysql中的元素。 我重写了onRefresh方法,在该方法中我使用了tablelayout.removeAllViews();然后重复从数据库中获取数据的过程。 但在此之前,请确保清空你的数组列表或任何数据结构,否则新数据将被追加到旧数据。

我有一些问题与动态刷新我的列表视图。

在适配器上调用notifyDataSetChanged()。 关于如何/何时调用notifyDataSetChanged()的其他细节可以在这个谷歌I/O视频中查看。

在我的情况下notifyDataSetChanged()没有正常工作[我从另一个类调用notifyDataSetChanged]。只是在这种情况下,我编辑了ListView在运行的活动(线程)。多亏了克里斯托弗,这个视频给了我们最后的提示。

在我的第二节课上,我用了

Runnable run = new Runnable(){
     public void run(){
         contactsActivity.update();
     }
};
contactsActivity.runOnUiThread(run);

访问update()从我的活动。此更新包括

myAdapter.notifyDataSetChanged();

来告诉适配器刷新视图。 在我看来还不错。

我只能通过获得新的适配器数据来获得notifyDataSetChanged,然后为列表视图重置适配器,然后像这样调用:

    expandableAdapter = baseFragmentParent.setupEXLVAdapter();
    baseFragmentParent.setAdapter(expandableAdapter);
    expandableAdapter.notifyDataSetChanged(); 

只需使用myArrayList.remove(position);监听器内部:

  myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) {
           myArrayList.remove(position);
           myArrayAdapter.notifyDataSetChanged();
        }
    });