主要答案依賴于框架生成的名稱。如果這種情況發(fā)生變化,那么它將不再起作用。
那么這個解決方案呢,覆蓋instantiateItem()
和destroyItem()
你的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
..但我一直在用這個來獲取電流Fragment
走出ViewPager
: adapater.getRegisteredFragment(viewPager.getCurrentItem())
這個再也不會回來了null
.
我不知道這個解決方案的其他缺點。如果有,我想知道。