自定义AdapterView响应其适配器的notifyDataSetChanged()

时间:2014-08-06 07:54:28

标签: android android-adapter android-adapterview

我正在创建自定义适配器视图。我最后一步所缺少的是让它响应其适配器的notifyDataSetChanged()方法。

当数据发生变化时,例如:

myArrayOfData.remove(0); // remove first object
myAwesomeAdapter.notifyDataSetChanged();

我必须使用新的更新数据创建布局。

我的问题是我应该添加一个监听器(如果是这样哪个监听器并绑定在哪个对象上)?或者我应该覆盖AdapterView中的方法(如果是这样)?我觉得这里的文档非常模糊。

在向AdapterView发出更改通知后,我将重新绘制布局,例如requestLayout();

1 个答案:

答案 0 :(得分:1)

您应该覆盖自定义AdapterView中的setAdapter方法并注册/取消注册DataSetObserver,例如:

private DataSetObserver mDataObserver = new DataSetObserver() {
        @Override
        public void onChanged() {
            requestLayout();
        }

        @Override
        public void onInvalidated() {
            requestLayout();
        }
    };

    @Override
    public void setAdapter(ListAdapter adapter) {
        if(mAdapter != null) {
            mAdapter.unregisterDataSetObserver(mDataObserver);
        }
        mAdapter = adapter;
        mAdapter.registerDataSetObserver(mDataObserver);
    }