我有一个ViewPager(扩展了FragmentPagerAdapter),其中包含两个Fragments。我需要的只是在我扫过每个ListView时刷新它们的Fragment。为此,我实现了ViewPager.OnPageChangeListener接口(interface)(即onPageScrollStateChanged)。为了保留对Fragment的引用,我使用了HashTable。我将对Fragments的引用存储在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调用两种orientation change中的必需方法(刷新):
 public void refreshList() {
        ((ItemsListFragment) mPageReferenceMap.get(0)).refresh();
        ((ItemsFavsListFragment) mPageReferenceMap.get(1)).refresh();
    }

一切正常,直到refresh()事件发生。之后的是IllegalStateException方法中的代码,即:
public void refresh() {
        mAdapter.changeCursor(mDbHelper.getAll());
        getListView().setItemChecked(-1, true); // The last row from a exception trace finishes here (my class).
    }

结果为Content:
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)

假设确实未创建boolean View ,我将onActivityCreated()方法中的true变量设置为if/else并使用getListView()条件调用或不调用FragmentPagerAdapter,这表明 Activity 和内容 View 已成功创建。

然后,我正在调试,以查看getItem()何时调用orientation change,并且碰巧在ViewPager事件之后未调用该方法。因此,看起来Fragments拥有对旧ViewPager的引用。这只是我的假设。

因此,是否有任何方法可以强制getItem()再次调用Fragments,因此我可以使用对当前ojit_code的适当引用?可能是其他解决方案?非常感谢你。

最佳答案



fragment 应自动重新创建,就像任何 fragment 在配置更改中一样。异常(exception)是,如果您使用setRetainInstance(true),则在这种情况下,它们应该是与以前相同的 fragment 对象。



那里的 fragment 怎么了?

关于android - FragmentPagerAdapter不会在方向更改时重新创建 fragment 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12254494/

10-12 04:06