从一个片段导航到另一个片段时出了点问题
something wrong when navigating from fragment to fragment
我有一个 activity 和 3 个片段 A、B、C 当应用程序启动时它包含主要 片段 A 然后我从 片段 A 导航到 片段 B,然后从 片段 B 导航到 片段 C。代码有效,它从 Fragment B 打开 Fragment C,但首先它打开 Fragment A 然后才打开片段 C。为什么以及如何解决这个问题?我还需要一个 activity 来托管片段 B、C 吗?
切换分片的方法:
private Fragment contentFragment;
public void switchContent(Fragment fragment, String tag){
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
while (fragmentManager.popBackStackImmediate());
if (fragment != null){
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.content_frame,fragment,tag);
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.addToBackStack(tag);
transaction.commit();
contentFragment = fragment;
}
}
R.id.content_frame 是在 activity setContentView.
上使用的布局 ID
发生这种情况是因为您在将当前片段替换为下一个片段之前弹出了返回堆栈中的所有片段。
你不需要这一行:
while (fragmentManager.popBackStackImmediate());
此外,这部分毫无意义:
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.addToBackStack(tag);
因为最后一行忽略了条件。
如果您希望将 FragmentB
以外的片段添加到后退堆栈,请尝试接下来编辑您的代码:
public void switchContent(Fragment fragment, String tag) {
if (fragment != null) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content_frame, fragment, tag);
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.commit();
contentFragment = fragment;
}
}
我有一个 activity 和 3 个片段 A、B、C 当应用程序启动时它包含主要 片段 A 然后我从 片段 A 导航到 片段 B,然后从 片段 B 导航到 片段 C。代码有效,它从 Fragment B 打开 Fragment C,但首先它打开 Fragment A 然后才打开片段 C。为什么以及如何解决这个问题?我还需要一个 activity 来托管片段 B、C 吗?
切换分片的方法:
private Fragment contentFragment;
public void switchContent(Fragment fragment, String tag){
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
while (fragmentManager.popBackStackImmediate());
if (fragment != null){
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.content_frame,fragment,tag);
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.addToBackStack(tag);
transaction.commit();
contentFragment = fragment;
}
}
R.id.content_frame 是在 activity setContentView.
上使用的布局 ID发生这种情况是因为您在将当前片段替换为下一个片段之前弹出了返回堆栈中的所有片段。
你不需要这一行:
while (fragmentManager.popBackStackImmediate());
此外,这部分毫无意义:
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.addToBackStack(tag);
因为最后一行忽略了条件。
如果您希望将 FragmentB
以外的片段添加到后退堆栈,请尝试接下来编辑您的代码:
public void switchContent(Fragment fragment, String tag) {
if (fragment != null) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content_frame, fragment, tag);
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.commit();
contentFragment = fragment;
}
}