如何通过重新启动导航回 activity?

How to navigate back to an activity with restarting it?

我有 MainActivity 和 SubActivity,MainActivity 使用代码启动 SubActivity:

    startActivity(new Intent(getApplicationContext(), SubActivity.class));
    overridePendingTransition(R.anim.slide_up, R.anim.no_animation);

然后我在 SubActivity 中做了一些事情,然后我必须 return 使用自定义动画到 MainActivity。当我 return 时,我还需要一种更新 MainActivity 的方法。 这是从 SubActivity 导航回 MainActivity 的代码,它根本不起作用:

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);
    finish();

如果我打电话:

    finish();
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

应用了动画,我return编辑到启动 SubActivity 的未更改的 MainActivity。

如果我打电话:

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

MainActivity 已重新创建,但我没有动画,我也不知道之前启动 SubActivity 的 MainActivity 发生了什么。

finish() 方法描述为:

 *Call this when your activity is done and should be closed.  The
 * ActivityResult is propagated back to whoever launched you via
 * onActivityResult().

但是我不知道如何使用这个 ActivityResult 来更新我的 MainActivity。

如何使用动画(仅适用于 finish())return 到 MainActivity,并在 return 到它时更新它?

正确,finish() 是将 return 用于前一个 activity 的正确方法,因为 startActivity(intent); 正在创建 [=23= 的新实例].要将数据传递给之前的 this 实例,您可以使用 SharedPreferences:

在调用 finish() 之前存储数据

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score_key), newHighScore);
editor.commit();

调用 MainActivity onResume 时从中读取

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), 0);

https://developer.android.com/training/data-storage/shared-preferences

启动子 activity 使用:

    Intent intent = new Intent(getApplicationContext(), SubActivity.class);
    startActivityForResult(intent, REQUEST_CODE);
    overridePendingTransition(R.anim.slide_up, R.anim.no_animation);

当你想 return 到 main activity:

    Intent intent = new Intent();
    intent.putExtra("extra_data", "from subactivity");
    setResult(Activity.RESULT_OK, intent);
    finish();
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

在 mainactivity 内部使用此方法获取 subactivity 发送的数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE) {

        if (resultCode == Activity.RESULT_OK) {
            String result = data.getStringExtra("extra_data");
            // do something with the result

        } else if (resultCode == Activity.RESULT_CANCELED) {
            // some stuff that will happen if there's no result
        }
    }
}