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