按活动操作栏后退按钮时如何转到上一个选定的选项卡

时间:2014-07-30 06:08:50

标签: android android-fragments android-actionbar

我在MainActivity中有六个Tabs,第二个选项卡有一个listview,当用户按下listview项时,它打开一个新的Activity with Action栏,所以,当用户按下第二个活动的后退按钮时,我想要转到主活动的上一个选项卡(第二个选项卡),但它加载第一个选项卡(主页选项卡)。

我如何解决这个问题?

2 个答案:

答案 0 :(得分:8)

使用向上导航返回父活动可重新创建父活动。重新创建父活动后,您将丢失所选的选项卡。不是保存选定的选项卡,而是更容易重新创建父活动。这可以通过将以下行添加到AndroidManifest文件的父活动部分来完成。

android:launchMode="singleTop"

这将阻止重新创建父级,因此您之前选择的选项卡仍将处于相同状态。

例如,如果MainActivity是带有标签的父级,则清单看起来像这样:

<activity android:name=".MainActivity"
          android:launchMode="singleTop">
    ...
</activity>

另见:

答案 1 :(得分:7)

我们这里有三个案例。实际的后退按钮(无论是硬件还是软件),Action Bar的父级(&#34; Up&#34;)按钮和两个按钮:

  • 后退按钮案例

当您致电SecondActivity时,请使用startActivityForResult()MainActivity了解SecondActivity的生命周期。当&#34;回来&#34;按下,在MainActivity.onActivityResult()中捕获此事件并切换到第二个标签:

MainActivity:您当前开始活动的地方

// Start SecondActivity that way. REQUEST_CODE_SECONDACTIVITY is a code you define to identify your request
startActivityForResult(new Intent(this, SecondActivity.class), REQUEST_CODE_SECONDACTIVITY);

MainActivity:onActivityResult()

// And this is how you handle its result    
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == REQUEST_CODE_SECONDACTIVITY && resultCode == RESULT_CANCEL) {
        switchToTab(2); // switch to tab2 
    }
    // else... other cases
}
  • 行动栏&#34; Up&#34;按钮案例

如果必须将此行为连接到操作栏&#34; Up&#34;按钮而不是后退按钮,您必须覆盖getSupportParentActivityIntent()getParentActivityIntent(),具体取决于您是否使用支持库。

SecondActivity:获取[支持] ParentActivityIntent()

@Override 
public Intent getSupportParentActivityIntent() { // getParentActivityIntent() if you are not using the Support Library
    final Bundle bundle = new Bundle();
    final Intent intent = new Intent(this, MainActivity.class);

    bundle.putString(SWITCH_TAB, TAB_SECOND); // Both constants are defined in your code
    intent.putExtras(bundle);

    return intent;
} 

然后,您可以在MainActivity.onCreate()处理此问题。

MainActivity:onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...

    final Intent intent = getIntent();

    if (intent.hasExtra(SWITCH_TAB)) {
        final int tab = intent.getExtras().getInt(SWITCH_TAB);

        switchToTab(tab); // switch to tab2 in this example
    }

    ...
  • 两个按钮案例:

如果您希望以同样的方式处理这两个按钮(无论这是不是一个好主意,我只是不知道),上面的两个解决方案可以同时实现,没有任何问题。

旁注:为了确定这是否是个好主意,这个official guide可能有所帮助。特别是&#34; 使用应用程序图标导航&#34;。