Gau*_*ora 20 android android-fragments back-stack onbackpressed
我遇到一个奇怪的问题,同时使用Fragments并弹出它们.
我有一个片段活动:
Step1:我在起始命名片段A中的那个Activity的onCreate中附加了一个片段:
这是片段活动的onCreate
@Override
protected void onCreate(Bundle savedBundleState) {
super.onCreate(savedBundleState);
setContentView(R.layout.activity_base_new);
Fragement_Home home = new Fragement_Home();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().add(R.id.frameContent, home).addToBackStack("home").commit();
}
Run Code Online (Sandbox Code Playgroud)
步骤:2之后,我附上了以下代码替换了Fragment:
Fragment_More moreFragment = new Fragment_More();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack("more").commit();
Run Code Online (Sandbox Code Playgroud)
第3步:在那之后我再次以相同的方式在Fragment_More上添加了一个片段:
Fragment_AboutRockstand termsConditions = new Fragment_AboutRockstand();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, termsConditions).addToBackStack("about_rockstand").commit();
Run Code Online (Sandbox Code Playgroud)
这是我的片段活动onBackPressedButton Lisetener:
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
Fragment f = fm.findFragmentById(R.id.frameContent);
if(fm.getBackStackEntryCount() > 1){
fm.popBackStack();
} else{
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的问题:
当我从第3步按回来时,它按照onBackPressed的描述成功地给了我之前的片段,它会回弹并将我带到前面的片段.但是从Fragment_More开始,当我再次按下时,它会显示空白的FRAGMENT内容.它从未显示我在活动的OnCreate中的第1步中添加的First Fragment.
请评论.我做错了什么?
谢谢
Chr*_*ris 48
您不应该将第一个片段添加到backstack,因为按下返回键只会反转您执行的操作.因此,如果您更换片段并按回,它将反转您所做的替换.但是如果你按下' .add()'fragmenttransaction,它只会删除它并显示一个空白页面.所以我认为从backstack中删除第一个片段应该可以解决问题.尝试一下,让我知道!
@Override
protected void onCreate(Bundle savedBundleState) {
super.onCreate(savedBundleState);
setContentView(R.layout.activity_base_new);
Fragement_Home home = new Fragement_Home();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().add(R.id.frameContent, home).commit();
}
Run Code Online (Sandbox Code Playgroud)
例:
所以假设你有两个叫A&B的片段
如果您将A.add()分段到页面,并且" "(=保存操作的反向),则在单击后退时将保存REMOVE片段A作为操作.addToBackStack()
如果.replace()片段一个通过片段乙,也" addToBackStack()"你会保存在删除乙,并添加一个,当您点击后面的动作.
所以你明白为什么将第一个片段事务添加到backstack并不是一个好习惯?它只会导致通过按下去除片段A,从而产生空白页面.希望这是足够的信息.
此外,一旦您删除了addToBackStack()第一个片段,您就不需要覆盖,onBackPressed()因为它将按预期工作.只有在Backstack中没有任何东西而没有首先显示空白页面时,它才会完成活动.
| 归档时间: |
|
| 查看次数: |
38125 次 |
| 最近记录: |