android – Viewpager的内容在轮换时丢失了

android – Viewpager的内容在轮换时丢失了,第1张

概述我有一个项目,它有一个MainActivity,它托管一个片段,通过Viewpager托管另外两个片段.它在首次启动时看起来很好,但是当我旋转时,Viewpager中的两个片段都会丢失.我已经尝试将getFragmentManager更改为getChildFragmentManager,但我会得到一个非法状态异常:无法保留嵌套在其他片段中的fragements. MainActivity.java 我有一个项目,它有一个MainActivity,它托管一个片段,通过VIEwpager托管另外两个片段.它在首次启动时看起来很好,但是当我旋转时,VIEwpager中的两个片段都会丢失.我已经尝试将getFragmentManager更改为getChildFragmentManager,但我会得到一个非法状态异常:无法保留嵌套在其他片段中的fragements.

MainActivity.java:

import androID.app.Actionbar;import androID.os.Bundle;import androID.vIEw.MenuItem;import androID.Widget.ArrayAdapter;import androID.Widget.ListVIEw;import com.jeremyfeinstein.slIDingmenu.lib.SlIDingMenu;import com.jeremyfeinstein.slIDingmenu.lib.app.SlIDingFragmentActivity;public class MainActivity extends SlIDingFragmentActivity {@TargetAPI(11)@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    getSupportFragmentManager()    .beginTransaction()    .replace(R.ID.mainContentFrame,new WorkOutsContainerFrag())    .commit();     setBehindContentVIEw(R.layout.menu);     Actionbar actionbar = getActionbar();        populate();       SlIDingMenu menu = getSlIDingMenu();        menu.setMode(SlIDingMenu.left);        menu.setShadowWIDthRes(R.dimen.shadow_wIDth);        menu.setShadowDrawable(R.drawable.shadow);        menu.setBehinDWIDthRes(R.dimen.slIDingmenu_offset);        menu.setFadeDegree(0.35f);        menu.settouchModeAbove(SlIDingMenu.touchMODE_FulLSCREEN);        menu.setSlIDingEnabled(false);        setSlIDingActionbarEnabled(true);        actionbar.setdisplayHomeAsUpEnabled(true);    }    @OverrIDe    public boolean onoptionsItemSelected(MenuItem item) {        switch (item.getItemID()) {        case androID.R.ID.home:            toggle();            return true;        default:            return super.onoptionsItemSelected(item);        }    }    private voID populate() {        ListVIEw lv = (ListVIEw) findVIEwByID(R.ID.ListVIEw1);        String[] values = new String[] { "Workouts","information","Ladders"};        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,androID.R.layout.simple_List_item_1,androID.R.ID.text1,values);        lv.setAdapter(adapter);    }

}

WorkoutsContainerFrag.java:

import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.support.v4.app.FragmentManager;import androID.support.v4.app.FragmentPagerAdapter;import androID.support.v4.vIEw.VIEwPager;import androID.util.TypedValue;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import com.astuetz.PagerSlIDingTabStrip;public class WorkOutsContainerFrag extends Fragment {private PagerSlIDingTabStrip tabs;private VIEwPager pager;private WorkoutsPagerAdapter adapter;@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {    VIEw vIEw = inflater.inflate(R.layout.workoutscontainer,container,false);    setRetainInstance(true);    tabs = (PagerSlIDingTabStrip) vIEw.findVIEwByID(R.ID.workoutstabs);    pager = (VIEwPager) vIEw.findVIEwByID(R.ID.workoutspager);    adapter = new WorkoutsPagerAdapter(getFragmentManager());    pager.setAdapter(adapter);    final int pagemargin = (int)  TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,4,getResources()            .getdisplayMetrics());    pager.setPagemargin(pagemargin);    tabs.setVIEwPager(pager);    return vIEw;

}

private GymWorkoutsFragment gymWorkoutsFragment;private OCWorkoutsFragment ocWorkoutsFragment;public class WorkoutsPagerAdapter extends FragmentPagerAdapter {    private final String[] TitleS = {"Gym Workouts","OC Workouts"};    public WorkoutsPagerAdapter(FragmentManager fm) {        super(fm);    }    @OverrIDe    public CharSequence getPageTitle(int position) {        return TitleS[position];    }    @OverrIDe    public int getCount() {        return TitleS.length;    }    @OverrIDe    public Fragment getItem(int position) {        switch (position) {        case 0:            gymWorkoutsFragment = new GymWorkoutsFragment();            return (Fragment)gymWorkoutsFragment;        case 1:            ocWorkoutsFragment = new OCWorkoutsFragment();            return (Fragment)ocWorkoutsFragment;    }        return null;}

}
}

解决方法 答案实际上非常简单,就是用FragmentStatePagerAdapter替换FragmentPagerAdapter 总结

以上是内存溢出为你收集整理的android – Viewpager的内容轮换时丢失了全部内容,希望文章能够帮你解决android – Viewpager的内容在轮换时丢失了所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1138062.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存