Android Back / Up按钮并保留以前的意图

时间:2016-04-08 19:50:33

标签: android android-intent android-navigation

我确定我错过了关于后台堆栈以及它如何在这里工作的东西,或者我只需要在这里添加几行,但我只是想让我的后退按钮功能正常工作。

活动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);

THE FIX

经过一番挖掘后,我发现默认的后退按钮功能不是很好。通过使用以下内容覆盖处理程序,我可以避免必须存储ID,因为没有调用onCreate - 活动的先前状态已经存储。

public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId()== android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

1 个答案:

答案 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()