从 ViewPager 中检索片段 [英] Retrieve a Fragment from a ViewPager
问题描述
我使用 ViewPager
和 FragmentStatePagerAdapter
来托管三个不同的片段:
I'm using a ViewPager
together with a FragmentStatePagerAdapter
to host three different fragments:
- [片段1]
- [片段 2]
- [片段3]
当我想从 FragmentActivity
中的 ViewPager
获取 Fragment1
时.
When I want to get Fragment1
from the ViewPager
in the 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.
这个解决方案怎么样,覆盖 Fragment(State)PagerAdapter
的 instantiateItem()
和 destroyItem()
:
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);
}
}
在处理可用的 Fragment 时,这似乎对我有用.尚未实例化的片段在调用 getRegisteredFragment
时将返回 null.但我一直在使用它主要是为了从 ViewPager
中获取当前的 Fragment
:adapater.getRegisteredFragment(viewPager.getCurrentItem())
和这不会返回 null
.
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屋!