android– 回到Fragments后的白屏

android– 回到Fragments后的白屏,第1张

概述我有一个Android应用程序工作正常,但我发现了一个烦人的错误,我不知道还有什么办法解决它.我的应用程序有一个Activity(称之为HomeActivity;好吧,加上PreferencesActivity)和很多片段.HomeActivity使用这种方法管理每个片段的替换(在此thread中找到,特别是查看以下comment):pub

我有一个Android应用程序工作正常,但我发现了一个烦人的错误,我不知道还有什么办法解决它.

我的应用程序有一个Activity(称之为HomeActivity;好吧,加上Preferences Activity)和很多片段. HomeActivity使用这种方法管理每个片段的替换(在此thread中找到,特别是查看以下comment):

public voID switchFragment(Fragment pFragment, String pTagFragment){    String backStatename = pTagFragment;    boolean fragmentPopped = mFragmentManager.popBackStackImmediate (backStatename, 0);    if (!fragmentPopped){ //fragment not in back stack, create it.        FragmentTransaction ft = mFragmentManager.beginTransaction();        ft.replace(R.ID.content_frame, pFragment);        ft.addToBackStack(backStatename);        ft.commit();    }}

要替换片段,我所做的是以下内容:

switchFragment(new FragmentEuskalmet(), FragmentEuskalmet.FRAGMENT_name);

这就是问题所在:我浏览了几个片段(比如说其中3个片段).然后,我想回去,所以我按了2次.当我到达堆栈中的最后一个时,显示白色屏幕(即,在片段所在的位置显示白色).奇怪的是,如果我长按到我的主页按钮以显示最近的应用程序并再次选择我的应用程序,则片段会正确加载.

我假设我的switchFragment方法中可能有某些内容,例如它可能是与backStack相关的任何问题.一个重要的细节是我已经在每个片段中编写了所谓的空构造函数.

任何人都可以帮我一把吗?如果有人要求,我可以提供更多代码.

编辑:
我认为必须输入我的sss方法:

@OverrIDepublic voID onBackpressed(){    invalIDateOptionsMenu();    if(CURRENT_FRAGMENT != FragmentMapa.FRAGMENT_name){//"com.ingartek.bizkaimove.ui.FragmentMapa"){        mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerRightrelativeLayout);    }    if(mDrawer.isDrawerOpen(GravityCompat.START)){        mDrawer.closeDrawer(GravityCompat.START);        setToolbarSubTitle(mSubTitleAux);    }else{        setToolbarSubTitle(getString(R.string.app_name_subTitle));        if (getSupportFragmentManager().getBackStackEntryCount() == 1){            //finish();            showExitDialog();        }else {            super.onBackpressed();            popFragment();        }    }}

我想我应该改写这部分:

}else {     super.onBackpressed();     popFragment();}

解:
正如@Ajay Pandya建议的那样,我以这种方式离开onBackpressed():

@OverrIDepublic voID onBackpressed(){    invalIDateOptionsMenu();    if(CURRENT_FRAGMENT != FragmentMapa.FRAGMENT_name){//"com.ingartek.bizkaimove.ui.FragmentMapa"){        mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerRightrelativeLayout);    }    if(mDrawer.isDrawerOpen(GravityCompat.START)){        mDrawer.closeDrawer(GravityCompat.START);        setToolbarSubTitle(mSubTitleAux);    }else{        setToolbarSubTitle(getString(R.string.app_name_subTitle));        if (getSupportFragmentManager().getBackStackEntryCount() > 0) {            if (getSupportFragmentManager().getBackStackEntryCount() == 1){                //finish();                showExitDialog();            }else{                mFragmentManager.popBackStackImmediate();            }        } else {            super.onBackpressed();        }    }}

解决方法:

您可以管理后退堆栈和屏幕以便退出

@OverrIDepublic voID onBackpressed() {    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {        getSupportFragmentManager().popBackStack();    } else {        super.onBackpressed();    }}
总结

以上是内存溢出为你收集整理的android – 回到Fragments后的白屏全部内容,希望文章能够帮你解决android – 回到Fragments后的白屏所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1111080.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存