Обновить ListView из пользовательского класса ListView

Я использую 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 учебный класс.

Инициализация адаптера и 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);
        }
    }
}

3 ответа

Решение

Кажется невозможным в моем конкретном случае. LoaderManager это корень проблемы, я не могу связать LoaderManager к п views,

lim n -> ∞

Попробуй это:

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

Я думаю, что вам нужно вызвать метод listView.setAdapter() после вызова notifyDataSetChanged()

Другие вопросы по тегам