android fragmentpageradapter切换不更新,android – FragmentPagerAdapter不会在方向更改时重新创建片段吗?...

我有一个ViewPager(扩展FragmentPagerAdapter),它包含两个片段.我需要的是当我在它们之间滑动时为每个片段刷新ListView.为此,我实现了ViewPager.OnPageChangeListener接口(即onPageScrollStateChanged).为了保存对Fragments的引用,我使用了HashTable.我在getItem()方法中存储对HashTable中的Fragments的引用:

@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;

}

}

因此,当我从一个片段滑动到另一个片段时,onPageScrollStateChanged触发我使用HashTable在两个片段中调用所需方法(刷新):

public void refreshList() {

((ItemsListFragment) mPageReferenceMap.get(0)).refresh();

((ItemsFavsListFragment) mPageReferenceMap.get(1)).refresh();

}

一切顺利,直到方向改变事件发生.之后是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视图,我将onActivityCreated()方法中的boolean变量设置为true,并使用if / else条件来调用getListView(),这显示了成功创建的活动和内容视图.

然后我正在调试以查看FragmentPagerAdapter何时调用getItem(),并且在方向更改事件之后不会调用该方法.所以看起来ViewPager持有对旧片段的引用.这只是我的假设.

那么,有没有办法强制ViewPager再次调用getItem(),所以我可以使用对当前片段的正确引用?可能是其他一些解决方案?非常感谢你.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值