使用片段关闭底部导航栏的应用程序

时间:2018-02-06 09:35:11

标签: android android-fragments bottomnavigationview

我正在使用底部导航栏。当我点击底部导航中的每个项目时,Fragment将替换为另一个。当我想要退回时我想退出应用程序。我认为这很容易。

但问题在于: 在每个片段我都有按钮。如果我们点击按钮,它将替换为另一个片段。如果我按下后退按钮,我想转到它在底部导航栏中的前一个片段。在此之后,如果用户再次按下,应该退出应用程序。 我该怎么办?

我应该使用onBackPressed()吗?

我使用了这段代码但是没有工作

boolean pressBackForExit = false;
@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0){
        pressBackForExit = true;
    }
    if (pressBackForExit){
        finish();
    }
    if (getSupportFragmentManager().getBackStackEntryCount() > 0){
        getSupportFragmentManager().popBackStack();
        if (getSupportFragmentManager().getBackStackEntryCount() == 0){
            pressBackForExit = true;
        }
    }
}

如果是,请告诉我如何?

3 个答案:

答案 0 :(得分:0)

首先,您必须获得您现在所在的片段。就像你只想从BottomFragments回来然后把所有BottomFragments放在那里,如果是,那么onBackPress();

   Fragment f = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container);
      if (f instanceof NavBottomOneFragment ) {
            onBackPressed();
       }

尝试使用以下代码,将此代码放在Activity类上。 这是双击退出应用程序的代码。

boolean doubleBackToExitPressedOnce = false;

 @Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }
    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Press again to exit..", Toast.LENGTH_SHORT).show();
    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;
        }
    }, 2000);
}

答案 1 :(得分:0)

这可以通过唱两个容器来完成 一个用于背景片段,即用于标签切换 第二个按钮点击片段假设容器id是fragment_container现在你的活动onBackPressed方法做了以下

@覆盖 public void onBackPressed(){

 Fragment frag = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
 if (frag != null){ getSupportFragmentManager().beginTransaction().remove(frag).commit();
return;                
}

        super.onBackPressed();
    }

答案 2 :(得分:0)

1.Override activity onBackPressed()方法

public void onBackPressed() {
    finish()
}