Android-从活动到片段的导航
我正在开发一些应用程序,我有一个问题 我有: 1.FrameLayout中具有ListFragment的活动A(导航抽屉模式): xml:Android-从活动到片段的导航,android,android-fragments,android-activity,android-navigation,android-savedstate,Android,Android Fragments,Android Activity,Android Navigation,Android Savedstate,我正在开发一些应用程序,我有一个问题 我有: 1.FrameLayout中具有ListFragment的活动A(导航抽屉模式): xml: 活动B,在ListFragment中显示ListView的详细数据 如何使用ListFragment的保存UI从活动B返回(使用导航向上按钮)到活动A(如果使用Home back返回,活动将重新创建)。 顺便说一句,如果我按下手机上的“后退”按钮,“活动”不会重新创建并返回到以前的状态。要防止第一个要重新创建的活动,可以做的一件事是,当按下“后退”按钮
顺便说一句,如果我按下手机上的“后退”按钮,“活动”不会重新创建并返回到以前的状态。要防止第一个要重新创建的活动,可以做的一件事是,当按下“后退”按钮时,只需在第二个“活动”上调用
finish()
未测试,但我相信id是android.R.id.home,因此您只需在第二个活动中覆盖选项ItemSelected,如下所示:
/**
* Handles the selection of a MenuItem.
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
使用完导航后,将重新创建上一个活动。为了防止在保留向上导航的同时发生这种情况,您可以获取父活动的意图,如果父活动存在,则将其放在最前面,如果不存在,则创建父活动
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent parentIntent = NavUtils.getParentActivityIntent(this);
parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(parentIntent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
我还在清单中指定了
launchMode=“singleTop”
。但我不确定这是否有必要。你是说在操作栏上出现一个向上按钮吗?@McAdam331是的。在活动A中,此按钮打开抽屉,在活动B中,此按钮返回谢谢!你帮了我!很高兴我能帮忙!:)如果您从该活动启动应用程序(使用通知或类似方式),这会中断导航。@EpicPandaForce如果我在android清单中指定父活动,它会返回到父活动,不是吗?如果您编写finish()
并从挂起的意图(通知)启动活动?我不这么认为。这就是为什么UP navigation最初被设计的原因,尽管它对于如何正常地重新创建以前的活动有点忙碌。@EpicPandaForce我将测试它,我以前从未做过,所以我不知道答案。我做过,我做了,这样子活动就得到了“启动器”的意图。如果是这种情况,则“向上”按钮实际上不会正确重定向到父级,它只会完成当前活动。这就是我提出“黑客”的原因,也就是说我在上面发布了。:)
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent parentIntent = NavUtils.getParentActivityIntent(this);
parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(parentIntent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}