从自定义ListView类中刷新ListView

时间:2013-01-31 13:13:23

标签: android listview android-listview android-arrayadapter android-loadermanager

我使用LoaderManager来填充ListView的适配器数据。我实现了LoaderManager.Callbacks但我无法刷新ListView来显示新数据。 致电adapter.notifyDatasetChanged()invalidate()postInvalidate()不会做任何事情。

一些代码:

@Override
public void onLoadFinished(Loader<ArrayList<Items>> arrayListLoader, ArrayList<Items> entries) {
    Log.i("TAG", "+++ onLoadFinished() called! +++");
    switch (arrayListLoader.getId()) {
        case LOADER_ID:
            mAdapter.setData(entries);
            mAdapter.notifyDataSetChanged();
            invalidate();
            break;
    }
}

adapterListView类的默认构造函数中初始化。

适配器和ListView初始化(剥离到相关部分):

public CustomListView(Activity activity) {
    [...]
    mAdapter = new CustomEntryAdapter(mActivity, R.layout.row_monthlistview);
    setAdapter(mAdapter);
    mCallbacks = this;
    LoaderManager loaderManager = mActivity.getSupportLoaderManager();
    loaderManager.initLoader(LOADER_ID, null, mCallbacks);
    [...]
}

我的自定义setData的{​​{1}}方法:

Adapter

3 个答案:

答案 0 :(得分:0)

试试这个:

yourGlobalList.clear();
yourGlobalList.addAll(entries)
mAdapter.notifyDataSetChanged();

答案 1 :(得分:0)

在我的具体案例中似乎是不可能的。 LoaderManager是问题的根源,我无法将n LoaderManager绑定到n views

lim n - &gt; ∞

答案 2 :(得分:-3)

我认为你需要在调用notifyDataSetChanged()之后调用listView.setAdapter()方法