【问题标题】:Android fragments and the backstackAndroid Fragments 和 backstack
【发布时间】:2015-12-04 10:10:18
【问题描述】:

我正在构建一个使用抽屉导航的 android 应用程序,它看起来和运行良好,除了我无法将当前视图(片段)添加到后台堆栈以允许用户更轻松地导航应用程序。目前,后退按钮在按下时会退出应用程序。我在这里查看了各种问题,但没有一个有效。

这是我目前的尝试,不明白为什么它不起作用。

    if (id == R.id.nav_gallery) {
//            fragmentManager.beginTransaction().replace(R.id.content_frame, new  GalleryFragment()).commit();
//            fragmentManager.beginTransaction().addToBackStack(null);

        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.replace(R.id.content_frame, new GalleryFragment());
        ft.addToBackStack(null);
        ft.commit();
    }

编辑

onbackPressed

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    FragmentManager fragmentManager = getFragmentManager();
    int backCount = fragmentManager.getBackStackEntryCount();

    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

【问题讨论】:

  • 我当然希望 GalleryFragment() 不会使用 setRetainInstance(true) 保留。
  • @Lakhan 在事务中添加到后台堆栈时,不需要覆盖onBackPressed
  • 代码来自您的活动,对吧?不是片段?
  • @Tapirboy 在加载片段的主要活动中是正确的。我已经接受了下面的答案。我确实热处理了在 onBackPressed() 中按下的背面 btn。它现在正在工作

标签: android android-fragments back-stack fragment-backstack


【解决方案1】:

如果您想在按下 android 的后退按钮时控制您的交易,请使用以下代码

@Override
public void onBackPressed() {

// initialize variables
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

// check to see if stack is empty
if (fm.getBackStackEntryCount() > 0) {          
    fm.popBackStack();
    ft.commit();    
}
else {
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
Toast.makeText(this, "Nochmal drücken zum Beenden!", 4000).show();
this.lastBackPressTime = System.currentTimeMillis();
} else{
        super.onBackPressed();
    }        
}
}

【讨论】:

  • 好的,所以你说它可能正在工作,我只是在按下背面时没有从后台获取项目@vishaljangid
【解决方案2】:
instead of doing
super.onBackPressed();

使用以下条件从返回堆栈中弹出顶部状态

    if(backCount >0){
        fragmentManager.popBackStack();
    }else{
        super.onBackPressed();
    }

【讨论】:

    【解决方案3】:

    你可以试试这个吗?

    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.content_frame, new GalleryFragment());
    ft.addToBackStack("gallery_fragment");
    ft.commit();
    

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多