这几天我一直在寻找,但没有成功,所以我发布了这个问题,希望有人能回答。
设置(使用 android-support-library-v4,修订版 12):
我有 1 个带有 ViewPager 的主要活动。
我有 1 个片段类,称为 DataFragmentClass,它由一个 ListView 组成。这个片段类从互联网上异步加载数据并将其显示在列表视图中。但是,这个片段类可以加载两种类型的数据,称为 DataTypeA 和 DataTypeB。
我所做的是在我的主要活动中创建这个片段的两个实例,如下所示:
Fragment[] mFragmentList = new Fragment[2];
mFragmentList[0] = DataFragmentClass.newInstance(Modes.DataTypeA);
mFragmentList[1] = DataFragmentClass.newInstance(Modes.DataTypeB);
然后我将此数组传递给我的 ViewPager,它工作正常。
创建后,Fragments 将开始异步加载数据:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.genericlistview, container, false);
DataProvider mDataProvider = new DataProvider(this.getActivity());
mDataProvider.addListener(mDataResponseAdapter);
return view;
}
第一个数据加载一切正常 - DataTypeA 将加载到 Fragment1,DataTypeB 将加载到 Fragment2。
但是,任何后续加载都会导致数据“溢出”。所有数据(类型 A 和 B)现在都加载到 Fragment2 中。
我已将问题缩小到 ListView 更新。
我要做的是:
Runnable updateListView = new Runnable(){
@Override
public void run() {
adapter.add(myNewData);
adapter.notifyDataSetChanged();
}
};
DataFragmentClass.this.getActivity().runOnUiThread(updateListView);
我认为在这些方面出了点问题:
- 在 UI 线程上发布可运行文件时。
- 当远程服务器返回数据时。
任何建议都会非常有帮助。谢谢!