问题的标题可能不明确。或者我没有描述我在寻找什么。
我的应用中有两项活动。让我们说他们的名字是" ActivityA" 和" ActivityB" 。在" ActivityA"片段很少。让我们说他们的名字是" FragmentA" " FragmentB" " FragmentC" " FragmentD" 等。默认片段是" FragmentA" ,这意味着当活动开始时#34; FragmentA"开始。
现在,如果我导航到" ActivityB" ,然后回到" ActivityA" ,它总是打开" FragmentA" 。但我想要的是如果我导航到" FragmentB" ,然后导航到" ActivityB" ,然后返回" ActivityA" 它开始" FragmentA" ,但我想要" FragmentB" 来开始,我之前是
答案 0 :(得分:1)
不确定我是否理解正确,但我认为当您致电 ActivityB 时,您需要做的是startActivityForResult
。当您按BackButton时,您提供有关要调用的片段的必要信息,并在 ActivityB 的onActivityResult
中捕获这些信息,然后导航到所需的片段。
答案 1 :(得分:1)
您可能正在通过startActivity()
从 ActivityB 重新启动 ActivityA ,而不是完成 ActivityB 。如果是这样,请完成 ActivityB 。然后,您将看到 ActivityA 中最后显示的片段。
或者您也可以使用onSaveInstanceState
方法跟踪Fragments
。这个answer可以帮助您解决此问题。
或者在 ActivityA 中使用以下内容也可以解决您的问题:
<activity android:name=".ActivityA" android:launchMode="singleTop">
答案 2 :(得分:1)
创建一个返回最后一个可见片段的方法
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;
}
创建Fragment
类的实例并将其设置为null
Fragment lastVisibleFragment = null;
在onPause
中保存最后一个片段
@Override
protected void onPause() {
super.onPause();
lastVisibleFragment = getVisibleFragment();
}
然后在onResume()
中添加您所在的最后一个片段(如果不为空)
@Override
protected void onResume() {
super.onResume();
if(lastVisibleFragment !=null){
getSupportFragmentManager().beginTransaction()
.add(yourFrameLayout, lastVisibleFragment)
.commit();
}
else{ //Add first fragment you were adding}
}