如何通过重新启动导航回 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
}
}
}
我有 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
}
}
}