必须按两次后退按钮才能转到上一个 activity?

Have to press the back button twice to get to previous activity?

我只是想点击返回并导航到我之前的 activity。我的流程是这样的:我去 news_feed activity -> Comments activity -> User Profile activity -> click back (去 Comments activity) -> click back (出于某种原因这没有任何作用)-> 单击返回(返回 news_feed activity)。我不确定为什么在尝试从 Comments activity 返回 news_feed activity 时必须单击 back 两次。如果我从 news_feed activity -> Comments -> 按回(转到 news_feed activity)这很有效。这是我的代码:

news_feed.java:

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);
}

Comments.java:

@Override
public void onBackPressed() {
    super.onBackPressed();
    this.finish();
}

UserProfile.java:

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(UserProfile.this, Comments.class);
    Bundle bundle = new Bundle();
    bundle.putString("postId", postId);
    bundle.putString("posterUserId", posterUserId);
    bundle.putString("posterName", posterName);
    bundle.putString("postStatus", postStatus);
    bundle.putString("postTimeStamp", postTimeStamp);
    bundle.putString("postTitle", postTitle);
    intent.putExtras(bundle);
    startActivity(intent);
    finish();
}

我认为导航到这些活动不会改变任何内容,但如果有必要,我也可以包括我用来导航到这些活动的意图。否则,我只是包含了我为这些活动准备的 onBackPressed 代码。任何想法为什么这可能会导致问题?任何帮助,将不胜感激。谢谢。

您可以尝试这样的操作:

private boolean clicked;
@Override
public void onBackPressed() {
    if (!clicked) { // if it was not clicked before, change the value of clicked to true and do nothing directly return, if clicked again, then it will be finish the activity.
        clicked=true;
        return;
    }
    super.onBackPressed();
}

如果你要使用时间,那么你可以这样做:

private long lastClicked;
@Override
public void onBackPressed() {
    if (System.currentTimeMillis() - lastClicked  < 1000) { // within one second
        super.onBackPressed();
    }
    lastClicked = System.currentTimeMillis();
}

我想通过使用

将结果发回上一个activity开始activity
startActivityForResult() 

而不是

startActivity()

并且不要覆盖

onBackPressed()
public void onBackPressed() {


        if (this.lastBackPressTime < System.currentTimeMillis() - 2000) {



            this.lastBackPressTime = System.currentTimeMillis();
        } else {


            //super.onBackPressed(); for exit

            //INTENT HERE TO YOUR SECOND ACTIVITY like below

             Intent intent=new Intent(A.this,B.class);
              startActivirty(intent);
        }

}

Create a global variable

private long lastBackPressTime = 0;

希望这对你有帮助,让我知道..

在您的 UserProfile class 中,在 onBackPressed() 方法中,您将再次启动 Comments class。为什么你必须这样做? 发生的情况是,您正在启动 UUserProfile class 的新 Comments activity onBackPressed(),因此有两个 Comments Activity 实例。所以你觉得你按了两次btn。

如果您必须将数据从 UserProfile class 传回 Comments,请使用 setResult() 方法。

这会有帮助

How to pass data from 2nd activity to 1st activity when pressed back? - android

Sending data back to the Main Activity in android

如果您要做的只是在当前 activity 中调用 startActivity()finish(),则无需覆盖 onBackPressed()。 Android backstack 将为您处理这两个问题。此外,在您的 UserProfile.java 中,您正在将数据传递给之前的 activity。为此,您应该在 Comments activity(即之前的 activity)中使用 startActvityForResult() 而不是 startActivity().

要了解有关 startActvityForResult() 的更多信息,请访问:https://developer.android.com/training/basics/intents/result.html