检索从ViewPager一个片段 [英] Retrieve a Fragment from a ViewPager
问题描述
我使用了一个 ViewPager
连同 FragmentStatePagerAdapter
举办三种不同的片段:
I'm using a ViewPager
together with a FragmentStatePagerAdapter
to host three different fragments:
- [片段1]
- [Fragment2]
- [Fragment3]
当我想要得到片段1
从 ViewPager
在 FragmentActivity
。
这是什么问题,怎么解决呢?
What is the problem, and how do I fix it?
推荐答案
主要答案依赖于由框架生成一个名称。如果这都没有改变的话,那将不再起作用。
The main answer relies on a name being generated by the framework. If that ever changes, then it will no longer work.
那么这个解决方案,覆盖 instantiateItem()
和 destroyItem()
你的片段(州)PagerAdapter
:
What about this solution, overriding instantiateItem()
and destroyItem()
of your Fragment(State)PagerAdapter
:
public class MyPagerAdapter extends FragmentStatePagerAdapter {
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return ...;
}
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(...);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
}
这似乎在与片段可处理为我工作。尚未被实例化片段,当调用 getRegisteredFragment
将返回null。但我一直在使用这个已经大部分得到电流片段
出的 ViewPager
: adapater.getRegisteredFragment(viewPager.getCurrentItem())
,这将不会返回空
。
This seems to work for me when dealing with Fragments that are available. Fragments that have not yet been instantiated, will return null when calling getRegisteredFragment
. But I've been using this mostly to get the current Fragment
out of the ViewPager
: adapater.getRegisteredFragment(viewPager.getCurrentItem())
and this won't return null
.
我不知道该解决方案的任何其他缺点。如果有任何,我想知道。
I'm not aware of any other drawbacks of this solution. If there are any, I'd like to know.
这篇关于检索从ViewPager一个片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!