2

我使用 a用数据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;
    }
}

在类的adapter默认构造函数中初始化ListView

Adapter 和 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我的自定义方法Adapter

public void setData(ArrayList<Items> data) {
    clear();
    if (data != null) {
        for (Items aData : data) {
            add(aData);
        }
    }
}
4

3 回答 3

0

在我的具体情况下似乎是不可能的。这LoaderManager是问题的根源,我无法将 n 绑定LoaderManager到 n views

lim n -> ∞</p>

于 2013-01-31T17:25:31.077 回答
0

尝试这个 :

yourGlobalList.clear();
yourGlobalList.addAll(entries)
mAdapter.notifyDataSetChanged();
于 2013-01-31T13:23:20.510 回答
-3

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

于 2013-01-31T13:18:47.277 回答