Android 如何在活动中导航时保存片段状态
可能问题的标题不清楚。或者我没有描述我在寻找什么 我的应用程序中有两个活动。让我们说他们的名字是“ActivityA”和“ActivityB”。在“活动A”下,几乎没有片段。让我们说他们的名字是“FragmentA”“FragmentB”“FragmentC”“FragmentD”等等。默认片段是“FragmentA”,这意味着当活动开始时,“FragmentA”开始Android 如何在活动中导航时保存片段状态,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,可能问题的标题不清楚。或者我没有描述我在寻找什么 我的应用程序中有两个活动。让我们说他们的名字是“ActivityA”和“ActivityB”。在“活动A”下,几乎没有片段。让我们说他们的名字是“FragmentA”“FragmentB”“FragmentC”“FragmentD”等等。默认片段是“FragmentA”,这意味着当活动开始时,“FragmentA”开始 现在,如果我导航到“ActivityB”,然后返回到“ActivityA”,它总是打开“FragmentA”。但我想要的是,如果
现在,如果我导航到“ActivityB”,然后返回到“ActivityA”,它总是打开“FragmentA”。但我想要的是,如果我导航到“FragmentB”,然后导航到“ActivityB”,然后返回到“ActivityA”,它会启动“FragmentA”,但我想启动“FragmentB”,我以前在中不确定我是否正确理解你,但我认为你需要做的是
startActivityForResult
当你调用你的活动b时。当您按下BackButton时,您将提供有关要调用的片段的必要信息,并在ActivityB的ActivityResult上捕获这些信息,然后导航到所需片段。不确定我是否正确理解您的意思,但我认为你需要做的是startActivityForResult
当你调用你的活动b时。按BackButton时,您提供了有关要调用的片段的必要信息,并在ActivityB的onActivityResult
中捕获这些信息,然后导航到所需片段。您可能正在通过startActivity()从ActivityB重新启动ActivityA
而不是完成活动b。如果是这样,只需完成您的活动b。然后您将进入活动a中最后显示的片段
或者也可以使用onSaveInstanceState
方法来跟踪片段。这可以帮你解决这个问题
或者在活动中使用以下选项a也可以解决您的问题:
<activity android:name=".ActivityA" android:launchMode="singleTop">
您可能正在通过startActivity()
从ActivityB重新启动ActivityA,而不是完成ActivityB。如果是这样,只需完成您的活动b。然后您将进入活动a中最后显示的片段
或者也可以使用onSaveInstanceState
方法来跟踪片段。这可以帮你解决这个问题
或者在活动中使用以下选项a也可以解决您的问题:
<activity android:name=".ActivityA" android:launchMode="singleTop">
创建一个返回最后一个可见片段的方法
public Fragment getVisibleFragment(){
FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
if(fragment != null && fragment.isVisible())
return fragment;
}
}
return null;
}
在onPause
中保存最后一个片段
@Override
protected void onPause() {
super.onPause();
lastVisibleFragment = getVisibleFragment();
}
然后在onResume()
中添加最后一个片段(如果不是null)
@Override
protected void onResume() {
super.onResume();
if(lastVisibleFragment !=null){
getSupportFragmentManager().beginTransaction()
.add(yourFrameLayout, lastVisibleFragment)
.commit();
}
else{ //Add first fragment you were adding}
}
创建一个返回最后一个可见片段的方法
public Fragment getVisibleFragment(){
FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
if(fragment != null && fragment.isVisible())
return fragment;
}
}
return null;
}
在onPause
中保存最后一个片段
@Override
protected void onPause() {
super.onPause();
lastVisibleFragment = getVisibleFragment();
}
然后在onResume()
中添加最后一个片段(如果不是null)
@Override
protected void onResume() {
super.onResume();
if(lastVisibleFragment !=null){
getSupportFragmentManager().beginTransaction()
.add(yourFrameLayout, lastVisibleFragment)
.commit();
}
else{ //Add first fragment you were adding}
}
如果您提供一些简短的代码来从活动B导航到活动A会更好,您是使用intent启动活动A还是使用back按钮?我使用back按钮添加默认片段的活动生命周期是什么?或者片段是通过xml添加的?默认片段是在onCreate中添加的。如果您提供一些简短的代码来从活动B导航到活动A会更好,您是使用intent启动活动A还是使用back按钮?我使用back按钮您添加默认片段的活动生命周期是什么?或者片段是通过xml添加的?默认片段是在OnCreate中添加的。我已经尝试过您的方法。我的应用程序中有一个导航抽屉。getVisibleFragment()返回我的导航抽屉Fragmenti我已经尝试过你的方法。我的应用程序中有一个导航抽屉。getVisibleFragment()返回我的导航抽屉片段