我有一个ViewPager
(extends FragmentPagerAdapter
) 包含两个Fragments
. 当我在它们之间滑动时,我需要的是ListView
为每个刷新一个。Fragment
为此,我实现了ViewPager.OnPageChangeListener
接口(即onPageScrollStateChanged
)。为了保存对Fragment
s 的引用,我使用了HashTable
. 我在方法中存储对Fragments
in的引用:HashTable
getItem()
@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()
true
if/else
getListView()
然后我正在调试以查看何时FragmentPagerAdapter
调用getItem()
并且发生orientation change
事件后未调用该方法。所以看起来它ViewPager
包含对 old 的引用Fragments
。这只是我的假设。
那么,有没有办法强制再次ViewPager
调用getItem()
,所以我可以使用对 current 的正确引用Fragments
?可能是其他一些解决方案?非常感谢你。