【问题标题】:Fragment overlap after back button pressed按下后退按钮后片段重叠
【发布时间】:2019-04-17 03:58:44
【问题描述】:

我有三个片段(片段A、片段B、片段C)。代码从fragmentA到fragmentB,然后fragmentB到Fragemnt C。

当我按下返回按钮时,我会从 fragmentC 转到 fragmentA。

按下返回键后,fragmentA 会显示出来,但你也可以看到它后面的 fragmentC。

片段A

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentB)
  .addToBackStack("Null")  
  .commit();

片段B

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentC)
  .commit();

片段C

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentC)
  .commit();

当按下后退按钮时,我想从 fragmentC 转到 fragmentA 并且不让片段 C 显示在后台

【问题讨论】:

标签: android android-fragments


【解决方案1】:

在 addToBackStack 中使用 null 作为参数,而不是 "Null"

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

    ft.repalce(R.id.container, fragmentB)
      .addToBackStack(null)  
      .commit();

【讨论】:

    【解决方案2】:

    你可以在替换片段的时候试试这个

    Fragment frag=null;
    frag=new Navigation_Help();
    if(frag!=null){
            FragmentManager fragmentManager=getSupportFragmentManager();
            FragmentTransaction ft=fragmentManager.beginTransaction();
            ft.replace(R.id.sacreenarea,frag);
            //for not to back previous fragment remove next nile
            ft.addToBackStack(null);
            ft.commit();
        }
    

    【讨论】:

      【解决方案3】:

      我尝试使用 @ADM 重复链接,它会将我带到片段 A,但如果我第二次加载片段 B,我会收到双重提交错误。

      对我有用的解决方案是使用@Override onBackPressed() 重新启动活动,这将默认重新加载片段A。

      片段 B

      FragmentManger fm = fragmentManager();
      FragmentTransaction ft = fm.beginTransaction();
      fm.replace(R.id.container, fragmentC, "fragmentC");
      .commit();
      

      fragmentC 后退按钮被按下

      活动

      @Override
      public void onBackPressed() {
          if(getSupportFragmnetManager().findFragmnetByTag("fragmentC") !=null) {
              Intent myIntent = new Intent(this, Activity.class);
              startActivity(myIntent);
              finish();
          } else {
              super.onBackPressed();
          }
      }
      

      此解决方案仅在您想返回 Activity 加载的第一个片段时才有效,因此它可能不是最好的解决方案,但它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多