繁体   English   中英

使用片段通过底部导航栏关闭应用

[英]Close app by bottom navigation bar using fragment

我正在使用底部导航栏。 当我单击底部导航中的每个项目时,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;
        }
    }
}

如果是,请告诉我如何?

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

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

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

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);
}

这可以通过选择两个容器来完成,一个用于背景片段,即用于选项卡切换,第二个用于片段的按钮单击,假设容器ID是fragment_container,现在在您的活动onBackPressed方法中执行以下操作

@Override public void onBackPressed(){

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

        super.onBackPressed();
    }

1.重写活动的onBackPressed()方法

public void onBackPressed() {
    finish()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM