簡體   English   中英

FragmentStatePageAdapter緩存,重新創​​建活動后如何引用舊片段? (對於前-橫向模式)

[英]FragmentStatePageAdapter cache, how do I reference old fragments after activity recreated? (for ex - landscape mode)

在我的應用程序中,我有一個ViewPager,它以滑動視圖的布局顯示3個片段。 如果重新創建了活動(例如,如果我進入橫向模式),則無法再獲得對片段的引用。

這是我的適配器

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方法? 謝謝!

getFragmentManager.findFragmentByTag()// <<-如果要動態管理片段getFragmentManager.findFragmentById()// <<-如果在布局文件中使用<fragment>。

我仍然不確定,但是我解決了調用instantiateItem(viewpager, position)來獲取給定位置的片段。 如果我做對了,則此方法返回給定位置處的片段(如果存在),如果不存在,它將創建另一個片段(我猜它調用getItem()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM