【问题标题】:How can I disable go back in some activity and not in fragments如何禁用返回某些活动而不是片段
【发布时间】:2017-03-01 14:53:57
【问题描述】:

基本上当在手机上按下 BACK 按钮时,我想阻止特定活动返回到它在 android 中的前一个活动。

具体来说,我有登录和注册屏幕,当成功登录/注册时,它们都会启动一个名为 HomeScreen 的新活动。一旦 HomeScreen 启动,我希望防止用户能够通过按 BACK 键返回登录或注册屏幕,我还希望他们能够在 HomeScreen 中的片段之间导航,例如他们可以导航到共享、通信等片段。

我曾想过在按下 backKey 时使用 finish() 方法,但这会退出应用程序,我也不希望这样。

【问题讨论】:

  • 刚刚完成启动 HomeScreen 活动的活动,因此它成为堆栈中的第一个

标签: android android-fragments


【解决方案1】:

你可以试试:

public void onBackPressed() {

   if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
        getSupportFragmentManager().popBackStack();
   } else {
        finish();
   }
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    在您启动 HomeScreen Intent 的地方调用 finish():

    Intent intent = new Intent(this, HomeScreen.class);
    startActivity(intent);
    finish();
    

    【讨论】:

    • 我的代码是这样的:@Override public void onBackPressed() { int count = getFragmentManager().getBackStackEntryCount() - 1; if (count == 0) { super.onBackPressed(); } else { getFragmentManager().popBackStack();这很好,但是当我从登录或注册活动成功登录并导航到主屏幕并按返回键时,它返回到登录或注册活动,我只是想阻止这种情况。
    【解决方案3】:

    假设这是您的活动流程

    SplashActivity----->HomeScreenActivity

    1) 从 BackStack 中移除 SplashActivity

    SplashActivity.java

    Intent intent = new Intent(this, HomeScreenActivity.class);
    startActivity(intent);
    finish();
    

    2) 覆盖 HomeScreenActivity 中的 onBackPressed()

    不要调用super.onBackPressed(),因为默认实现在内部调用finish() 方法。

    HomeScreenActivity.java

    public void onBackPressed() {
        //super.onBackPressed();    <-- Dont call this 
    
       /* Your logic to navigate between fragments goes here */
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2021-04-20
      • 2016-09-20
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2021-03-04
      相关资源
      最近更新 更多