Android 在 onBackPressed() 上丢失额外内容
Android extras getting lost on onBackPressed()
我试图有意地保存一些数据,所以当用户访问另一个屏幕或按下 后退按钮 并返回时,数据仍然存在。本质上是存储屏幕的状态。
所以你在片段1,你导航到Activity2(重要数据在这里),如果你离开 activity 2 返回时按返回或通过其他方式数据仍然存在。
这是我从片段 1Activity2 开始的地方
intent = new Intent(getActivity(), DeliveryPageActivity.class);
...
startActivityForResult(intent,
这是我目前正在尝试解决问题的地方
@Override
public void onBackPressed() {
//saving here (working okay)
storeIntent.putExtra("currentDelivery", pageIndicatorView.getCurrentPage());
setResult(RESULT_OK, storeIntent);
super.onBackPressed();
}
@Override
protected void onResume() {
super.onResume();
//restoring here (NOT WORKING, intent has no extras)
if (storeIntent.hasExtra("currentDelivery")) {
currentDelivery = storeIntent.getIntExtra("currentDelivery", currentDelivery);
pageIndicatorView.setCurrentPage(currentDelivery, true);
}
}
并在 onCreate()
中开始一个 new 意图
storeIntent = new Intent();
尝试在您的 Activity 2 中覆盖 onPause 而不是 onBackPressed。参见 docs for activity lifecycle
编辑:
对不起刚刚测试。在你的情况下,我会使用 SharedPreferences 来恢复
并覆盖 OnPause(按下后退按钮时调用)和 onResume,如下所示:
@Override
protected void onPause() {
super.onPause();
SharedPreferences sp = this.getSharedPreferences("myPrefsName", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("currentDelivery",pageIndicatorView.getCurrentPage());
editor.apply();
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences sp = this.getSharedPreferences("myPrefsName", MODE_PRIVATE);
testState = sp.getInt("currentDelivery", 0);
}
如果你不想接收任何数据,那么使用startActivityForResult()
方法就没有意义了。您可以只使用 startActivity()
方法打开 activity.
调用 finish();
而不是 super.onBackPressed()
@Override
public void onBackPressed() {
//saving here (working okay)
storeIntent.putExtra("currentDelivery", pageIndicatorView.getCurrentPage());
setResult(RESULT_OK, storeIntent);
finish();
}
我试图有意地保存一些数据,所以当用户访问另一个屏幕或按下 后退按钮 并返回时,数据仍然存在。本质上是存储屏幕的状态。
所以你在片段1,你导航到Activity2(重要数据在这里),如果你离开 activity 2 返回时按返回或通过其他方式数据仍然存在。
这是我从片段 1Activity2 开始的地方
intent = new Intent(getActivity(), DeliveryPageActivity.class);
...
startActivityForResult(intent,
这是我目前正在尝试解决问题的地方
@Override
public void onBackPressed() {
//saving here (working okay)
storeIntent.putExtra("currentDelivery", pageIndicatorView.getCurrentPage());
setResult(RESULT_OK, storeIntent);
super.onBackPressed();
}
@Override
protected void onResume() {
super.onResume();
//restoring here (NOT WORKING, intent has no extras)
if (storeIntent.hasExtra("currentDelivery")) {
currentDelivery = storeIntent.getIntExtra("currentDelivery", currentDelivery);
pageIndicatorView.setCurrentPage(currentDelivery, true);
}
}
并在 onCreate()
storeIntent = new Intent();
尝试在您的 Activity 2 中覆盖 onPause 而不是 onBackPressed。参见 docs for activity lifecycle
编辑: 对不起刚刚测试。在你的情况下,我会使用 SharedPreferences 来恢复 并覆盖 OnPause(按下后退按钮时调用)和 onResume,如下所示:
@Override
protected void onPause() {
super.onPause();
SharedPreferences sp = this.getSharedPreferences("myPrefsName", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("currentDelivery",pageIndicatorView.getCurrentPage());
editor.apply();
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences sp = this.getSharedPreferences("myPrefsName", MODE_PRIVATE);
testState = sp.getInt("currentDelivery", 0);
}
如果你不想接收任何数据,那么使用startActivityForResult()
方法就没有意义了。您可以只使用 startActivity()
方法打开 activity.
调用 finish();
而不是 super.onBackPressed()
@Override
public void onBackPressed() {
//saving here (working okay)
storeIntent.putExtra("currentDelivery", pageIndicatorView.getCurrentPage());
setResult(RESULT_OK, storeIntent);
finish();
}