2013-08-26 25 views
1

在我的应用程序中,我得到了一个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方法? 谢谢!

回答

0

getFragmentManager.findFragmentByTag()// < < - 如果使用的是<片段>在布局文件中 - 如果你正在管理片段动态 getFragmentManager.findFragmentById()// < <。

+0

三江源,顺便说一下,你可以在我的getItem方法见我没有使用交易,所以我没有分配标签。我在网上找到了这个方法: 'public Fragment findFragmentByPosition(int position){ FragmentPagerAdapter fragmentPagerAdapter = getFragmentPagerAdapter(); return getSupportFragmentManager()。findFragmentByTag( “android:switcher:”+ getViewPager()。getId()+“:” + fragmentPagerAdapter.getItemId(position)); }' 但fragmentstatepageradapter没有getItemId(position)方法,所以我如何设法通过标签查找片段? – Alessandro

0

我仍然不确定这一点,但我解决了调用instantiateItem(viewpager, position)来得到给定位置的片段。如果我猜中了这个方法返回给定位置的片段,如果它存在,如果不是它创建另外一个(我猜它调用getItem()

相关问题