【问题标题】:Android override back buttonAndroid 覆盖后退按钮
【发布时间】:2012-03-08 19:49:33
【问题描述】:

我在 Activity1 中有一个(自定义)列表视图。当我单击一行时,Activity2 打开另一个(自定义)列表视图。在两个列表视图的行中都有几个对象:imageview、checkbox、textview。
当我将所有复选框设置为在 activity2 中选中,然后单击手机的 BACK 按钮时,应选中列表视图中相应行的复选框。但是,当我单击“返回”按钮时,什么也没有发生(检查了 Logcat,没有新行,没有日志,什么都没有)。
所以我想我覆盖了 BACK 按钮,所以当我点击它时,Activity1 应该打开。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
      Intent intentstart = new Intent(Activity2.this, Activity1.class);
      startActivity(intentstart);
      return true;
    }
    return super.onKeyDown(keyCode, event);    
 }

这行得通,但我有顾忌。这是一个好的解决方案吗?有更好的解决方案吗? 因为这会破坏 BACK btn 的正常行为。

正常行为:

  1. Activity1 打开。我单击一行-> Activity2 打开。我单击返回-> 我看到了 Activity1。我点击一行 -> Activity2 打开.......玩了几分钟后,我在 Activity1,我点击返回,我在我的应用程序的打开屏幕。

新行为:

  1. Activity1 打开。我单击一行-> Activity2 打开。我单击返回-> 我看到了 Activity1。我点击一行-> Activity2 打开.......玩了几分钟后,我在 Activity1,我点击返回,Activity2 打开。然后再次返回-> Activity1 打开。然后再次返回->Activity2 打开,依此类推,直到我回滚之前打开的所有活动。

【问题讨论】:

    标签: android back


    【解决方案1】:
    Intent intentstart = new Intent(Activity2.this, Activity1.class);
    intentstart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intentstart);
    

    此标志将删除打开的活动。

    例如,考虑一个由以下活动组成的任务:A、B、C、D。如果 D 调用 startActivity() 并带有解析为活动 B 的组件的 Intent,则 C 和 D 将完成并且 B 接收给定的 Intent,导致堆栈现在是:A,B。

    如果你想选中activity2上的复选框并在返回时选中activity1。 你应该使用

    startActivityForResult(intent, requestCode);//when start new activity
    
    Intent resultIntent = new Intent(); // when finish activity2
    resultIntent.putExtra("selected", selected); //send checked data to activity1
    setResult(Activity.RESULT_OK, resultIntent);
    finish();
    

    然后重写 onActivityResult() 来勾选复选框

    附:当按下返回按钮时,您可以覆盖 onBackPressed() 以执行操作。

    【讨论】:

    • 我正在使用 sqlite 和循环来检查复选框的状态。你写的可能更容易,但是一旦它工作了,我不想修改我的代码:)
    【解决方案2】:

    您需要做的是使用startActivityForResult() 启动活动。这将允许您覆盖onActivityResult()。获得结果后只需刷新数据视图即可。

    另外我总发现用户难免会要求我提供一个“保存”按钮来积极确认操作并使用返回来取消操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多