Android 浏览页面时不显示以前的片段

Android 浏览页面时不显示以前的片段,android,viewpagerindicator,Android,Viewpagerindicator,我正在开发一个由视图寻呼机组成的应用程序,当我滑动视图寻呼机时,所有片段都正确加载,但这是我的问题。当我再次用同样的片段滑动视图寻呼机时,它会再次加载,但根据我的要求,以前加载的片段应该得到恢复 A) 这是我的浏览页面 mViewPager = (ViewPager)mMyPageFragment.findViewById(R.id.Viewpager); myAdapter = new MyAdapter(getFragmentManager()); mVie

我正在开发一个由视图寻呼机组成的应用程序,当我滑动视图寻呼机时,所有片段都正确加载,但这是我的问题。当我再次用同样的片段滑动视图寻呼机时,它会再次加载,但根据我的要求,以前加载的片段应该得到恢复

A) 这是我的浏览页面

mViewPager = (ViewPager)mMyPageFragment.findViewById(R.id.Viewpager);

        myAdapter = new MyAdapter(getFragmentManager());
        mViewPager.setAdapter(myAdapter);
        myAdapter.notifyDataSetChanged();
在适配器中

public class MyAdapter extends FragmentStatePagerAdapter {
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public Fragment getItem(int position) {
        System.out.println("MyAdapter="+position);
        switch (position) {
        case 0:
            return new MyPageFirstFragment1();
        case 1:
            return new MyPageFirstFragment2();
        case 2:
            return new MyPageFirstFragment3();

        default:
            return null;
        }
    }
}
第二种方法

private static Hashtable<Integer, Fragment> fragmentItems = new Hashtable<Integer, Fragment>();

    @Override
    public Fragment getItem(int position) {
        System.out.println("MyAdapter=" + position);
        switch (position) {
        case 0: {
            if (!fragmentItems.containsKey(position)) {
                fragmentItems.put(position, new MyPageFirstFragment1());
            }
            return fragmentItems.get(position);
        }
        case 1: {
            if (!fragmentItems.containsKey(position)) {
                fragmentItems.put(position, new MyPageFirstFragment2());
            }
            return fragmentItems.get(position);
        }
        case 2: {
            if (!fragmentItems.containsKey(position)) {
                fragmentItems.put(position, new MyPageFirstFragment3());
            }
            return fragmentItems.get(position);
        }
        case 3: {
            if (!fragmentItems.containsKey(position)) {
                fragmentItems.put(position, new MyPageFirstFragment4());
            }
            return fragmentItems.get(position);
        }

        default:
            return null;
        }
    }
private static Hashtable fragmentItems=new Hashtable();
@凌驾
公共片段getItem(int位置){
System.out.println(“MyAdapter=“+位置”);
开关(位置){
案例0:{
如果(!fragmentItems.containsKey(位置)){
放置(位置,新MyPageFirstFragment1());
}
返回碎片项目。获取(位置);
}
案例1:{
如果(!fragmentItems.containsKey(位置)){
fragmentItems.put(位置,新MyPageFirstFragment2());
}
返回碎片项目。获取(位置);
}
案例2:{
如果(!fragmentItems.containsKey(位置)){
fragmentItems.put(位置,新MyPageFirstFragment3());
}
返回碎片项目。获取(位置);
}
案例3:{
如果(!fragmentItems.containsKey(位置)){
fragmentItems.put(位置,新MyPageFirstFragment4());
}
返回碎片项目。获取(位置);
}
违约:
返回null;
}
}

这是我使用过的代码,但我不能保留片段。

您不应该将片段保存到静态对象中。。因为fragment manager会在设备配置更改期间保存有关片段的信息,然后恢复片段。。而是变成新的碎片对象。您的“旧”静态对象将变得无效。如果savedInstanceState!=null,如果是,我将通过这些标记(findFragmentByTag)还原查看寻呼机片段,并从还原的片段创建新适配器。。例如 `


`

来自sdk

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i( LOG_TAG, "onCreate()" );
        //setting view pager
        mViewPager = (ViewPager) findViewById( R.id.mainActivity_viewPager );


        //initializing activity
        if( savedInstanceState == null ) {
            Log.i( LOG_TAG, "onCreate() - savedInstanceState == null" );
            //activity first creation
        } else {
            Log.i( LOG_TAG, "onCreate(), savedInstanceState != null, it is activity start after device reconfiguration.. " );


            //recreating viewpager adapter
            mViewPager.setAdapter( recreateParentFragmentListAdapter() );

        }
private ParentFragmentListAdapter recreateParentFragmentListAdapter() {
        List<BaseParentFragment> fragments = new ArrayList<BaseParentFragment>(3);
        for( int id = 0; id < 3; id++ ) {
            String fragmentTag = getFragmentTag( R.id.mainActivity_viewPager, id );//int -> long converting
            BaseParentFragment fragment = (BaseParentFragment) (getSupportFragmentManager().findFragmentByTag( fragmentTag ));

            Log.i( LOG_TAG, "onCreate() - finding fragment with tag {" + fragmentTag + "}, found fragment = " + (fragment == null ? "null" : fragment.toString() ) );

            if( fragment == null ){//creating it
                switch( id ) {
                case 0:
                    fragment = new Tab1Fragment();
                case 1:
                    fragment = new Tab2Fragment();
                case 2:
                    fragment = new Tab3Fragment();
                }
            } 
            fragments.add( fragment );
        }

        ParentFragmentListAdapter adapter = new ParentFragmentListAdapter( getSupportFragmentManager(), fragments );
        return adapter;
    }
private String getFragmentTag( int viewId, long id ) {
        return "android:switcher:" + viewId + ":" + id;
    }