Abl*_*ias 6 android android-fragments android-actionbar
我在MainActivity中有六个选项卡,第二个选项卡有一个listview,当用户按下listview项时,它打开一个新的Activity with Action栏,所以,当用户按下第二个活动的后退按钮时,我想去主活动的上一个选项卡(第二个选项卡),但它加载了第一个选项卡(主页选项卡).
我怎么解决这个问题?
使用向上导航返回父活动可重新创建父活动.重新创建父活动后,您将丢失所选的选项卡.不是保存选定的选项卡,而是更容易重新创建父活动.这可以通过将以下行添加到AndroidManifest文件的父活动部分来完成.
android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)
这将阻止重新创建父级,因此您之前选择的选项卡仍将处于相同状态.
例如,如果MainActivity是带有选项卡的父级,那么清单看起来像这样:
<activity android:name=".MainActivity"
android:launchMode="singleTop">
...
</activity>
Run Code Online (Sandbox Code Playgroud)
也可以看看:
我们这里有三个案例.实际后退按钮(无论是硬件还是软件),操作栏的父级("向上")按钮和两个按钮:
当你打电话时SecondActivity,startActivityForResult()用来MainActivity了解SecondActivity生命周期.按下"后退"时,捕获此事件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);
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
如果必须将此行为连接到操作栏的"向上"按钮而不是后退按钮,则必须覆盖getSupportParentActivityIntent()或getParentActivityIntent()取决于您是否使用支持库.
SecondActivity:get [Support] 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;
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以处理这个问题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
}
...
Run Code Online (Sandbox Code Playgroud)
如果你想以同样的方式处理这两个按钮(不管这是不是一个好主意,我只是不知道),上面的两个解决方案可以同时实现,没有问题.
旁注:要确定这是否是个好主意,本官方指南可能有所帮助.特别是" 使用应用程序图标导航 "部分.
| 归档时间: |
|
| 查看次数: |
4614 次 |
| 最近记录: |