在viewpager交换片段

我有3个片段,我的一个FragmentPagerAdapter ViewPager:

private class test_pager extends FragmentPagerAdapter { public test_pager(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { return fragments[i]; } @Override public long getItemId(int position) { if (position == 1) { long res = fragments[position].hashCode()+fragment1_state.hashCode(); Log.d(TAG, "getItemId for position 1: "+res); return res; } else return fragments[position].hashCode(); } @Override public int getCount() { return fragments[2] == null ? 2 : 3; } @Override public int getItemPosition(Object object) { Fragment fragment = (Fragment) object; for (int i=0; i<3; i++) if (fragment.equals(fragments[i])){ if (i==1) { return 1; // not sure if that makes a difference } return POSITION_UNCHANGED; } return POSITION_NONE; } }

在该页面(#1)中的一个,我不断变化的片段被显示。 我删除旧片段的方法是这样的:

FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction().remove(old_fragment1).commit();

然后,只是改变的值fragments[1]

我发现我真的不能addreplace新的一个或它会抱怨的ViewPager正试图用另一个标签添加它太...(我在这里做得不对?)

我所显示的片段具有setRetainInstance(true);在他们onCreate功能。

我的问题是,这通常非常适用于前几个替代品,但后来当我尝试重用片段,有时(我还没有真正想通了的模式,同样的片段可能会显示多次出现这种情况之前)只将显示一个空白页。

以下是我已经找到我的片段的回调函数,我想,当问题发生,显示发生了:

  • onAttach被称为(但在那个时候,getView仍然空)
  • onCreateView不叫(这是预期)
  • onViewStateRestored不叫(为什么不呢?)
  • onResume不叫(我真的以为会......)

如果改变任何东西,我使用的支持包,我的活动是一个SherlockFragmentActivity

编辑 (回答Marco的评论):

该片段在活动的OnCreate函数实例化,我充满了那些片段的ArrayList:

char_tests = new ArrayList<Fragment>(Arrays.asList( new FragmentOptionA(), new FragmentOptionB(), new FragmentOptionC()));

从列表中我选择设置fragments[1]这是所有在UI线程中完成)

--------------解决方案-------------

我通过改变test_pager来扩展FragmentStatePagerAdapter而不是解决了这个问题。

我仍然困惑,以什么PagerAdapter应根据使用情况使用。 我可以在文档中找到的唯一的事情说FragmentPagerAdapter是的,将被保存在内存和页面数量较少更好FragmentPagerStateAdapter为在那里他们将被破坏的网页数量较多更好,节省内存...

当试图做(看中?)事情片段,我发现FragmentStatePagerAdapter更好被删除时,页面和重新插入像在这种情况下。 而FragmentPagerAdapter是更好时,页面移动位置(参见错误37990)

分类:安卓 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.943 (s). 10 q(s)