在我的应用程序中,我得到了一个ViewPager,它在滑动视图布局中显示3个片段。 如果活动重新创建(例如,如果我转到横向模式),我无法再获取对碎片的引用。FragmentStatePageAdapter缓存,如何在重新创建活动后引用旧片段? (前 - 横向模式)
这是我的适配器
public class TabsPagerAdapter extends FragmentStatePagerAdapter{
public static final String FRAGMENT_MAP = "fragmentMap";
private SparseArray<MyFragment> myFragmentMap = new SparseArray<MyFragment>();
public TabsPagerAdapter(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int arg0) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
String nameOfTab = actionBar.getTabAt(arg0).getText().toString();
ArrayList<VideoBookmark> listOfFragment = myBookmarkManager.getList(nameOfTab);
args.putParcelableArrayList(MyFragment.ARG_LIST, listOfFragment);
fragment.setArguments(args);
myFragmentMap.put(arg0, fragment);
return fragment;
}
@Override
//return mytabs.size()???
public int getCount() {
return NUM_OF_TABS;
}
public void destroyItem (ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
myFragmentMap.remove(position);
}
public Fragment getFragment(int key) {
return myFragmentMap.get(key);
}
public SparseArray<MyFragment> getFragmentMap(){
return myFragmentMap;
}
public void setNewFragmentMap(SparseArray<MyFragment> newMap){
myFragmentMap = newMap;
}
}
我得到空指针异常此行
//get current fragment
int index = myViewPager.getCurrentItem();
Fragment fragment = myTabsPagerAdapter.getFragment(index);
EditText title = (EditText) fragment.getView().findViewById(R.id.new_title);
我查了一下,这种情况正在发生,因为为getItem方法不叫,所以我猜适配器重复使用以某种方式创建旧片段,但是如何访问此片段缓存以获取旧片段并能够使用findViewById方法? 谢谢!
三江源,顺便说一下,你可以在我的getItem方法见我没有使用交易,所以我没有分配标签。我在网上找到了这个方法: 'public Fragment findFragmentByPosition(int position){ FragmentPagerAdapter fragmentPagerAdapter = getFragmentPagerAdapter(); return getSupportFragmentManager()。findFragmentByTag( “android:switcher:”+ getViewPager()。getId()+“:” + fragmentPagerAdapter.getItemId(position)); }' 但fragmentstatepageradapter没有getItemId(position)方法,所以我如何设法通过标签查找片段? – Alessandro