向上导航,正确的处理方式

时间:2014-07-01 12:58:05

标签: android android-activity navigation android-actionbar

我知道有很多关于处理导航的问题,但是没有一个能让我满意。

我有3个活动:MainActivity,BookActivity,BookChaptersActivity。 BookActivity会收到一些额外内容以正确初始化。我正在使用这种推荐的导航方式:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        Intent upIntent = NavUtils.getParentActivityIntent(this);
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
            // This activity is NOT part of this app's task, so create a new task
            // when navigating up, with a synthesized back stack.
            TaskStackBuilder.create(this)
                    // Add all of this activity's parents to the back stack
                    .addNextIntentWithParentStack(upIntent)
                    // Navigate up to the closest parent
                    .startActivities();
        } else {
            // This activity is part of this app's task, so simply
            // navigate up to the logical parent activity.
            NavUtils.navigateUpTo(this, upIntent);
        }
        return true;
    }
    return super.onOptionsItemSelected(item);
}

然而,当在BookChapterActivity中使用向上导航时,我回到BookActivity,但它会在没有额外内容的情况下重新创建,因此它完全混乱。 我知道解决这个问题的推荐方法是使用:     机器人:launchMode =" singleTop" 里面的清单。但是,我觉得这不是处理这个问题的正确方法。如果我想拥有多个BookActivity实例怎么办?

所以我问你:这种情况应该如何妥善处理?

1 个答案:

答案 0 :(得分:0)

一个简单的方法是在启动BookChapterActivity之后完成()你的BookActivity,并在返回时使用新的Intent +你的额外内容启动BookActivity。

<强> BookChapterActivity

 @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    switch(item.getItemId()) {
        case android.R.id.home: handleBack();break; //Navigation UP Button was pressed.
        default: return true;
    }
    return true;
}

这个方法被称为:

private void handleBack() {
//put your extras in the new intent
    Intent bookActivity = new Intent(this,BookActivity.class);
    bookActivity.putExtra("key","extra");
    startActivity(bookActivity);
    finish();
}

BookActivity (接收信息)

Intent getBundleExtras = getIntent();
Bundle getBundleExtrasBundle = getBundleExtras.getExtras();
String extra = getBundleExtrasBundle.getString("key");

希望有所帮助。