【问题标题】:Back button pressed on parent activity在父活动上按下后退按钮
【发布时间】:2021-11-28 14:54:06
【问题描述】:

按下后退按钮时在操作栏中我如何知道在上一个活动中按下了后退按钮,按下后退按钮时不会调用onCreate()

我从下面的代码中知道在当前活动中按下了返回按钮,但我需要知道在之前的活动中按下了返回按钮

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        this.finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

【问题讨论】:

  • 您为什么需要知道这些?它通常不是您需要知道的。如果您的活动是通过后退按钮返回而不是通过其他方式返回,您将采取什么不同的做法?
  • 需要重新加载 ListView 以从 db 获取更新的项目
  • 您应该每次在 onResume 中都这样做。这样,如果您的用户因任何原因离开(例如最小化应用程序),您可以更新他的显示。

标签: android android-intent android-activity


【解决方案1】:

您可以使用registerForActivityResult() API 在活动之间导航,并在返回的 Intent 中添加一些额外的数据,这些数据可以显示您的来源。

在源活动:

ActivityResultLauncher<Intent> launcher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == AppCompatActivity.RESULT_OK) {
                if (result.getData() != null) {
                    String data = result.getData().getStringExtra("ACTIVITY_FROM");
                    if (data != null)
                        switch (data) {
                            case "ACTIVITY2":
                                // Returned from Activity2
                                Log.d(TAG, "onCreate: Returned from Activity2");
                                break;
                            case "ACTIVITY3":
                                // Returned from Activity3
                                Log.d(TAG, "onCreate: Returned from Activity3");
                                break;
                        }
                }
            }
        }
);

// Go to Activity 2:
auncher.launch(new Intent(this, Activity2.class));

在目的地活动处:

然后在需要从Activity2返回的时候放数据:

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        setIntent();
        this.finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}   

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

private void setIntent() {
    Intent intent = new Intent();
    intent.putExtra("ACTIVITY_FROM", "ACTIVITY2");
    setResult(Activity.RESULT_OK, intent);  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多