在父活动上按下后退按钮

Posted

技术标签:

【中文标题】在父活动上按下后退按钮【英文标题】: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 中都这样做。这样,如果您的用户因任何原因离开(例如最小化应用程序),您可以更新他的显示。 【参考方案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);  

【讨论】:

以上是关于在父活动上按下后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

Android Fragment句柄后退按钮按下[重复]

如果在对话框上按下按钮,如何启动活动

按下后退按钮时避免启动屏幕活动

按下后退按钮时如何删除堆栈中的所有活动

从活动结果意图按下后退按钮时应用程序关闭[关闭]

在操作栏上按“向上导航按钮”并返回到父活动时出错