我确定我错过了关于后台堆栈以及它如何在这里工作的东西,或者我只需要在这里添加几行,但我只是想让我的后退按钮功能正常工作。
活动A使用通过附加意图传递的ID来生成API请求以填充其字段(这在onCreate中完成)。活动B从活动A打开,但在返回活动A时,意图中没有id,因此不能进行任何请求。
如何设置我的导航,以便在启动活动B时保留创建活动A的意图,并在按下后退按钮时重新发送?任何与此相近的功能,如果更容易,也可能会很好。
截至目前,当我开始活动A时,我没有做任何特别的事情。 以下是我在活动B中设置后退按钮的方法(以及在我的清单中将父活动指定为活动A):
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar5);
setSupportActionBar(toolbar);
// Make sure there is a back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
提前感谢您的帮助。
我将ID附加到意图并启动活动A:
Intent detailsIntent = new Intent(context, ViewObjActivity.class);
detailsIntent.putExtra("objId", objId);
context.startActivity(detailsIntent);
我从活动A的onCreate:
中的意图中检索我的ID// Get data from extras
Intent detailsIntent = getIntent();
mObjID = detailsIntent.getIntExtra("objId", -1);
经过一番挖掘后,我发现默认的后退按钮功能不是很好。通过使用以下内容覆盖处理程序,我可以避免必须存储ID,因为没有调用onCreate - 活动的先前状态已经存储。
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:2)
您可以考虑使用此选项。
当意图从活动A更改为B 时,将执行onPause()方法。
因此,onPause()方法将是您保存Activity状态的好地方。
public static final String SHARED_PREFERENCE = "";
protected void onPause(){
super.onPause();
SharedPreferences settings = getSharedPreferences(SHARED_PREFERENCE,0);
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.putInt("ID", id);
editor.commit();
}
您必须恢复 SharedPreferences onResume()和 onCreate()。