java - 在ListAdapter(ListView)中重新填充数据的最佳方法

标签 java android list listview adapter

我确实使用此代码在 ListView 更改后用数据重新填充数据

// ListView lv;
// MyListAdapter la;
// DataClass dc;
dc.remove(object_id);
lv.setAdapter(la);

这是最好的方法吗?因为我们无法使用仅在 ArrayAdapter 中可用的 notifyDataSetChanged() 吗?

解决方案

 //MyListAdapter.java

private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>();

public void registerDataSetObserver(DataSetObserver arg0) {
    observers.add(arg0);
}

public void unregisterDataSetObserver(DataSetObserver arg0) {
    observers.remove(arg0);
}

public void notifyDataSetChange() {
    for (DataSetObserver d : observers) {
        d.onChanged();
    }
}

public void remove(int position) {
    [DataClass object].remove(position);
    notifyDataSetChange();
} 

最佳答案

对于 CursorAdapter我使用以下代码:

mAdapter.getCursor().requery();

如果您使用自定义适配器或正如您所评论的:只希望 ListAdapter 作为成员变量。而不是使用 private CustomAdapter mAdapter; (我推荐给 avoid creating unnecessary objects )。

您可以使用DataSetObserver部分和ListAdapter.registerDataSetObserver(DataSetObserver observer)DataSetObserver.onChanged()将由 BaseAdapter 实现调用,因此它应该适用于所有适配器。

BaseAdapter.notifyDataSetChanged():

public void notifyDataSetChanged() {
    mDataSetObservable.notifyChanged();
}

关于java - 在ListAdapter(ListView)中重新填充数据的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626575/

相关文章:

java - 在 AndroidStudio 的原始文件夹中播放 mp3 文件时,如何修复 java.lang.NullPointerException?

java - 谷歌日历 API OAUTH

java - 操作栏菜单项未正确着色

android - 可空接收器类型 bundle 的不安全使用? android 应用程序将在编译时出现警告但立即崩溃

python - 我怎样才能将这些数字放入列表中?

Python 从另一个列表中引用列表中的项目

python - 计算列表中连续真值的长度

java - Jpanel 未显示在 JFrame 中

java - 如何监听 ACTION_MANAGE_OVERLAY_PERMISSION 是否允许

android - NavigationDrawer 的多个 Activity (不是 fragment )。如何显示当前选中的Activity?