【问题标题】:Have to press the back button twice to get to previous activity?必须按两次后退按钮才能进入上一个活动?
【发布时间】:2016-08-01 09:31:27
【问题描述】:

我只是想点击返回并导航到我之前的活动。我的流程是这样的:我转到news_feed activity -> Comments activity -> User Profile activity -> click back(转到Comments activity)-> click back(出于某种原因,这没有任何作用)-> 单击返回(返回news_feed activity)。当我尝试从Comments activity 回到news_feed 活动时,我不确定为什么必须单击两次back。如果我从 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);
}

评论.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 代码。任何想法为什么这可能会导致问题?任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 不要在onBackPressed()中调用finish()
  • 你为什么在评论活动中使用 onBackPressd,如果你只需要完成它。当你不写 onBackPressCode 按下返回时,我会完成。

标签: java android android-intent onbackpressed


【解决方案1】:

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

如果您必须将数据从UserProfile 类传回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

【讨论】:

    【解决方案2】:

    我想通过使用将结果发送回之前的活动开始活动

    startActivityForResult() 
    

    startActivity()
    

    并且不要覆盖

    onBackPressed()
    

    【讨论】:

      【解决方案3】:

      你可以试试这样的:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:
          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;
          

          希望对你有帮助,告诉我..

          【讨论】:

            猜你喜欢
            • 2018-08-21
            • 1970-01-01
            • 2022-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-02
            相关资源
            最近更新 更多