从ViewPager检索片段

从ViewPager检索片段

我用的是ViewPager连同一个FragmentStatePagerAdapter承载三个不同的片段:

  • [碎片1]
  • [碎片2]
  • [碎片3]

当我想Fragment1ViewPagerFragmentActivity.

有什么问题,我该如何解决?


幕布斯6054654
浏览 516回答 4
4回答

慕斯王

主要答案依赖于框架生成的名称。如果这种情况发生变化,那么它将不再起作用。那么这个解决方案呢,覆盖instantiateItem()和destroyItem()你的Fragment(State)PagerAdapter:public&nbsp;class&nbsp;MyPagerAdapter&nbsp;extends&nbsp;FragmentStatePagerAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;SparseArray<Fragment>&nbsp;registeredFragments&nbsp;=&nbsp;new&nbsp;SparseArray<Fragment>(); &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MyPagerAdapter(FragmentManager&nbsp;fm)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(fm); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getCount()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;...; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Fragment&nbsp;getItem(int&nbsp;position)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;MyFragment.newInstance(...);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Object&nbsp;instantiateItem(ViewGroup&nbsp;container,&nbsp;int&nbsp;position)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fragment&nbsp;fragment&nbsp;=&nbsp;(Fragment)&nbsp;super.instantiateItem(container,&nbsp;position); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registeredFragments.put(position,&nbsp;fragment); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fragment; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;destroyItem(ViewGroup&nbsp;container,&nbsp;int&nbsp;position,&nbsp;Object&nbsp;object)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registeredFragments.remove(position); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.destroyItem(container,&nbsp;position,&nbsp;object); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Fragment&nbsp;getRegisteredFragment(int&nbsp;position)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;registeredFragments.get(position); &nbsp;&nbsp;&nbsp;&nbsp;}}在处理可用的片段时,这似乎适用于我。尚未实例化的片段,则在调用getRegisteredFragment..但我一直在用这个来获取电流Fragment走出ViewPager:&nbsp;adapater.getRegisteredFragment(viewPager.getCurrentItem())这个再也不会回来了null.我不知道这个解决方案的其他缺点。如果有,我想知道。

繁花不似锦

另一个简单的解决方案是:&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;MyPagerAdapter&nbsp;extends&nbsp;FragmentPagerAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Fragment&nbsp;mCurrentFragment; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Fragment&nbsp;getCurrentFragment()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mCurrentFragment; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//...&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setPrimaryItem(ViewGroup&nbsp;container,&nbsp;int&nbsp;position,&nbsp;Object&nbsp;object)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(getCurrentFragment()&nbsp;!=&nbsp;object)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCurrentFragment&nbsp;=&nbsp;((Fragment)&nbsp;object); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.setPrimaryItem(container,&nbsp;position,&nbsp;object); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java