我有一个ViewPager(extends FragmentPagerAdapter) 包含两个Fragments. 当我在它们之间滑动时,我需要的是ListView为每个刷新一个。Fragment为此,我实现了ViewPager.OnPageChangeListener接口(即onPageScrollStateChanged)。为了保存对Fragments 的引用,我使用了HashTable. 我在方法中存储对Fragmentsin的引用:HashTablegetItem()
@Override
public Fragment getItem(int num) {
if (num == 0) {
Fragment itemsListFragment = new ItemsListFragment();
mPageReferenceMap.put(num, itemsListFragment);
return itemsListFragment;
} else {
Fragment favsListFragment = new ItemsFavsListFragment();
mPageReferenceMap.put(num, favsListFragment);
return favsListFragment;
}
}
因此,当我从一个滑动Fragment到另一个onPageScrollStateChanged触发器时,我使用HashTable在两个触发器中调用所需的方法Fragments(刷新):
public void refreshList() {
((ItemsListFragment) mPageReferenceMap.get(0)).refresh();
((ItemsFavsListFragment) mPageReferenceMap.get(1)).refresh();
}
一切都很好,直到orientation change事件发生。之后是refresh()方法中的代码,即:
public void refresh() {
mAdapter.changeCursor(mDbHelper.getAll());
getListView().setItemChecked(-1, true); // The last row from a exception trace finishes here (my class).
}
结果IllegalStateException:
java.lang.IllegalStateException: Content view not yet created
at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
at ebeletskiy.gmail.com.passwords.ui.ItemsFavsListFragment.refresh(ItemsFavsListFragment.java:17)
假设Content确实没有创建视图,我将方法中的boolean变量设置为并使用条件来调用或不调用,这表明活动和内容视图已成功创建。onActivityCreated()trueif/elsegetListView()
然后我正在调试以查看何时FragmentPagerAdapter调用getItem()并且发生orientation change事件后未调用该方法。所以看起来它ViewPager包含对 old 的引用Fragments。这只是我的假设。
那么,有没有办法强制再次ViewPager调用getItem(),所以我可以使用对 current 的正确引用Fragments?可能是其他一些解决方案?非常感谢你。