繁体   English   中英

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

[英]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 中做一些事情之后,我必须使用自定义 animation 返回 MainActivity。 当我返回 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);

应用了 animation,我返回到启动 SubActivity 的未更改的 MainActivity。

如果我打电话:

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

MainActivity 已重新创建,但我没有 animation,我也不知道以前启动 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。

如何使用 animation(仅适用于 finish())返回 MainActivity,并在返回时更新它?

正确, finish()是用于返回上一个活动的正确方法,如startActivity(intent); 正在创建该活动的新实例。 要将数据传递给之前的 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

使用以下方式启动子活动:

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

当您想返回主要活动时:

    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
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM