必须按两次后退按钮才能进入上一个活动?

时间:2016-08-01 09:31:27

标签: java android android-intent onbackpressed

我只是想点击返回并导航到我以前的活动。我的流程是这样的:我转到news_feed activity - > Comments activity - > User Profile activity - > click back(转到Comments activity) - > click back(由于某些原因,这没有任何作用) - >单击返回(返回news_feed activity)。当我尝试从back返回Comments activity活动时,我不确定为什么必须点击news_feed两次。如果我从news_feed活动开始 - > 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代码。任何想法为什么会导致问题?任何帮助,将不胜感激。感谢。

5 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

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

答案 1 :(得分:0)

我想使用

将结果发送回上一个活动的开始活动
startActivityForResult() 

的内容
startActivity()

并且不要覆盖

onBackPressed()

答案 2 :(得分:0)

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

}
  

创建全局变量

private long lastBackPressTime = 0;

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

答案 3 :(得分:0)

UserProfile课程中,在onBackPressed()方法中,您将再次启动Comments课程。你为什么要这样做? 发生的事情是,您正在启动USerProfile类的新评论活动onBackPressed(),因此有两个评论活动实例。所以你觉得你要两次击退btn。

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

这将有所帮助

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

Sending data back to the Main Activity in android

答案 4 :(得分:0)

如果你要做的只是在当前活动中拨打onBackPressed()startActivity(),则无需覆盖finish()。 Android backstack将为您处理这两种情况。此外,在您的UserProfile.java中,您将数据传递给之前的活动。为此,您应该在startActvityForResult()活动中使用Comments(即之前的活动),而不是startActivity()

要详细了解startActvityForResult()访问:https://developer.android.com/training/basics/intents/result.html