重新加载中间片段时,Android FragmentStatePagerAdapter返回空白屏幕

重新加载中间片段时,Android FragmentStatePagerAdapter返回空白屏幕,第1张

概述我正在尝试使用FragmentStatePagerAdapter和ViewPager创建一个包含4个选项卡的应用程序. 当我第一次运行应用程序,如果我按顺序选择选项卡(0到3)一切顺利,然后如果我尝试执行返回的方式(3到0)选项卡1显示一个空白屏幕,如果,在那之后,我选择选项卡2,然后也是空白,如果我转到选项卡0并再次执行选项卡2恢复生命,有时选项卡1返回生活但我没有找到任何序列… 我知道这是一团 我正在尝试使用FragmentStatePagerAdapter和VIEwPager创建一个包含4个选项卡的应用程序.

当我第一次运行应用程序,如果我按顺序选择选项卡(0到3)一切顺利,然后如果我尝试执行返回的方式(3到0)选项卡1显示一个空白屏幕,如果,在那之后,我选择选项卡2,然后也是空白,如果我转到选项卡0并再次执行选项卡2恢复生命,有时选项卡1返回生活但我没有找到任何序列…

我知道这是一团糟…事情是标签1使用失败,标签2失败一些,标签0和3总是工作正常.如果我交换片段的位置一切都是一样的,我认为有些与片段代码无关……

logcat中没有显示错误,调试碎片显示一切都按照应该的方式进行…

我已经有几天试图修复它没有运气(显而易见……),我试图覆盖getItemposition()以返回position_NONE,我试图让我自己的FragmentStatePagerAdapter像这里说http://speakman.net.nz/blog/2014/02/20/a-bug-in-and-a-fix-for-the-way-fragmentstatepageradapter-handles-fragment-restoration/但没什么..还有一些对我没用的东西.

一些代码:
主类

public class Main extends FragmentActivity implements Actionbar.TabListener {        private MyPageAdapter mPagerAdapter;        private VIEwPager mPager;    @OverrIDe    protected voID onCreate(Bundle si) {        super.onCreate(si);        setContentVIEw(R.layout.activity_main);        init();    }        private voID init() {        final Actionbar actionbar = getActionbar();        actionbar.setNavigationMode(Actionbar.NAVIGATION_MODE_TABS);        if (mPagerAdapter == null) {            mPagerAdapter = new PaginaAdapter(getSupportFragmentManager());            mPager = (VIEwPager) findVIEwByID(R.ID.pager);            mPager.setAdapter(mPagerAdapter);            mPager.requesttransparentRegion(mPager);            mPager.setonPagechangelistener(new vIEwPager.SimpleOnPagechangelistener() {                @OverrIDe                public voID onPageSelected(int position) {                    actionbar.setSelectednavigationItem(position);                }            });            // Tab creation            for (int i = 0; i < mPagerAdapter.getCount(); i++) {                VIEw tabVIEw = getLayoutInflater().inflate(R.layout.tab,null);                ((ImageVIEw) tabVIEw.findVIEwByID(R.ID.tabIcon))                .setimageDrawable(getResources().getDrawable(mPagerAdapter.getIcon(i)));                           actionbar.addTab(actionbar.newTab().setCustomVIEw(tabVIEw).setTabListener(this));            }        }    }        @OverrIDe    public voID onTabReselected(Tab tab,FragmentTransaction ft) {    }    @OverrIDe    public voID onTabSelected(Tab tab,FragmentTransaction ft) {        mPager.setCurrentItem(tab.getposition());    }    @OverrIDe    public voID onTabUnselected(Tab tab,FragmentTransaction ft) {    }

适配器

public class MyPageAdapter extends FragmentStatePagerAdapter {     public MyPageAdapter(FragmentManager fm) {          super(fm);     }     @OverrIDe     public Fragment getItem(int position) {        Fragment fragment = null;        switch (position) {        case 0:            fragment = new InitFragment();            break;        case 1:            fragment = new MusicFragment();            break;        case 2:            fragment = new VIDeoFragment();            break;        case 3:            fragment = new PicFragment();            break;        }        return fragment;     }        @OverrIDe    public int getCount() {        return 4;    }....}

谢谢.

更新:我的片段是分开的类,它们不是静态的,这很重要吗?我刚刚意识到的另一件事是,在我触摸标签后它似乎正在破坏片段,因为如果我慢慢地滑动我可以看到片段但突然一切都消失了

解决方法 我建议你使用FragmentPagerAdapter而不是FragmentStatePagerAdapter.看起来你只想要每个都有3个Tabs和一个片段,这听起来并不太占用内存(只要它们没有充满Bitmaps等).使用FragmentStatePagerAdapter时,您负责在重新加载时恢复每个Fragment的状态,使用FragmentPagerAdapter系统会保留VIEw层次结构,这就是您想要的. 总结

以上是内存溢出为你收集整理的重新加载中间片段时,Android FragmentStatePagerAdapter返回空白屏幕全部内容,希望文章能够帮你解决重新加载中间片段时,Android FragmentStatePagerAdapter返回空白屏幕所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存