后退导航不恢复最后一个片段
Back Navigation does not restore the last fragment
我对 back navigation
有疑问,因为它无法恢复最后一个片段。所有活动都是 AppCompatActivity
使用 navigation_drawer(ActivityA
) 和 scroll_activity(ActivityB
) 模板 Android Studio
ActivityA
显示 fragment_1
(确定)
- 将
fragment_1
替换为fragment_2
(确定)
- 通过单击
fragment_2
中的按钮启动 ActivityB
(确定)
- 如果我点击系统的后退按钮,我可以看到
ActivityB
(GOOD)
- 如果我点击
ActivityB
的 back
导航,然后它显示 fragment_1
而不是 fragment_2
(不好)
我试过的有:
- 创建一个静态变量来控制显示哪个片段,并尝试在
onResume()
处再次渲染,但它不起作用。
- 遵循此 link 但也不起作用。
有什么帮助吗?谢谢
嗨,Nguyen,我创建了相同的场景,但是从 activityB
回来后 fragment_2 排在最前面
这是我的代码
`public class FirstActivity 扩展了 ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment1()).commit();
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment1 extends Fragment {
public PlaceholderFragment1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_first, container, false);
Button button = (Button) rootView.findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment2()).commit();
}
});
return rootView;
}
}
public static class PlaceholderFragment2 extends Fragment {
public PlaceholderFragment2() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_second, container, false);
Button button = (Button) rootView.findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), Secondctivity.class);
startActivity(intent);
}
});
return rootView;
}
}
}
`
这是我的清单文件
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".FirstActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Secondctivity"
android:label="@string/title_activity_secondctivity" >
</activity>
</application>
我忘记了一个简单的解决方案是 Activity Launch Mode。我像这样在 Manifest 文件中修改了 activity,一切正常。
<activity
android:name=".ActivityA"
android:launchMode="singleTask"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
问题是 back navigation
按钮试图再次创建 ActivityA
(可能是因为滚动 activity 模板行为)。
我对 back navigation
有疑问,因为它无法恢复最后一个片段。所有活动都是 AppCompatActivity
使用 navigation_drawer(ActivityA
) 和 scroll_activity(ActivityB
) 模板 Android Studio
ActivityA
显示fragment_1
(确定)- 将
fragment_1
替换为fragment_2
(确定) - 通过单击
fragment_2
中的按钮启动ActivityB
(确定)- 如果我点击系统的后退按钮,我可以看到
ActivityB
(GOOD) - 如果我点击
ActivityB
的back
导航,然后它显示fragment_1
而不是fragment_2
(不好)
- 如果我点击系统的后退按钮,我可以看到
我试过的有:
- 创建一个静态变量来控制显示哪个片段,并尝试在
onResume()
处再次渲染,但它不起作用。 - 遵循此 link 但也不起作用。
有什么帮助吗?谢谢
嗨,Nguyen,我创建了相同的场景,但是从 activityB
回来后 fragment_2 排在最前面这是我的代码 `public class FirstActivity 扩展了 ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment1()).commit();
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment1 extends Fragment {
public PlaceholderFragment1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_first, container, false);
Button button = (Button) rootView.findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment2()).commit();
}
});
return rootView;
}
}
public static class PlaceholderFragment2 extends Fragment {
public PlaceholderFragment2() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_second, container, false);
Button button = (Button) rootView.findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), Secondctivity.class);
startActivity(intent);
}
});
return rootView;
}
}
} `
这是我的清单文件
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".FirstActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Secondctivity"
android:label="@string/title_activity_secondctivity" >
</activity>
</application>
我忘记了一个简单的解决方案是 Activity Launch Mode。我像这样在 Manifest 文件中修改了 activity,一切正常。
<activity
android:name=".ActivityA"
android:launchMode="singleTask"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
问题是 back navigation
按钮试图再次创建 ActivityA
(可能是因为滚动 activity 模板行为)。