【发布时间】:2015-02-20 09:04:37
【问题描述】:
我在使用AsyncTaskLoader 回调更新常规Fragment 中的适配器时遇到问题。我正在使用片段支持库,版本 19.1.0。
在我的onLoadFinished() 回调中,我只需执行mAdapter.addAll(data)。我使用调试器来验证回调是否被调用,并且所有数据都已添加到适配器中。问题是列表视图根本不会更新。
我已经尝试过notifyDataSetChanged() 和invalidateViews() - 没有效果。
到目前为止,我看到的所有示例或教程都使用 ListFragment 或 ListActivity 没有自定义布局;我已经尝试过了,它工作正常。特别是,我尝试了来自Android Design Patterns loader tutorial 的示例程序。不幸的是,我不能使用ListFragment,因为我正在使用StickyListHeaders 库(但即使尝试使用常规ListView 也不起作用)。
在修改above sample program 以使用Fragment 而不是ListFragment 通过删除ListFragment 特定的方法调用并扩展自定义视图时,我得到了相同的结果。相关代码归结为:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new AppListAdapter(getActivity());
getLoaderManager().initLoader(LOADER_ID, null, this);
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.list_layout, container, false);
ListView listView = (ListView) v.findViewById(android.R.id.list);
listView.setAdapter(mAdapter);
return v;
}
@Override
public void onLoadFinished(Loader<List<AppEntry>> loader, List<AppEntry> data) {
mAdapter.setData(data);
}
正如我之前所说,适配器会更新,但列表视图根本不会重绘,即使您添加 notifyDataSetChanged 并在 listView 上调用 invalidateViews 也是如此。我发现很难弄清楚这里出了什么问题。
【问题讨论】:
-
你的适配器代码是什么?
-
确实,我们需要查看您的适配器代码 - 如果视图没有更新,那么适配器很可能是罪魁祸首。
标签: android android-fragments android-listview android-listfragment android-loader