android 中的后退新闻片段问题
Back press fragments issue in android
我有四个片段:A、B、C、D。现在我从 A --> B 移动,所以我的代码将是
从 A 到 B
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new B())
.addToBackStack("A")
.commit();
现在从 B 到 C 所以代码将是
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new C())
.addToBackStack("B")
.commit();
现在从 C 到 D。但我不想将 C 包含在 backstack 中,因为在后退时我不想显示 C 片段。
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new D())
.commit();
现在,当我按下“返回”按钮时,它将完美地工作到 A。现在,如果我再次重复相同的过程。现在再次按下 From D Fragment,我将直接发送到 A 片段而不是 B 片段。你能找出我在上面的代码中犯的错误吗?
您必须为单个堆栈的 addToBackStack 提供相同的字符串值。
.replace(R.id.content_frame, new B())
.addToBackStack("stack")
.replace(R.id.content_frame, new C())
.addToBackStack("stack")
这里是BackStackChangedListener的代码。
public static void performNoBackStackTransaction( final FragmentManager fragmentManager, String tag, Fragment fragment) {
final int newBackStackLength = fragmentManager.getBackStackEntryCount() +1;
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment, tag)
.addToBackStack(tag)
.commit();
fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
int nowCount = fragmentManager.getBackStackEntryCount();
if (newBackStackLength != nowCount) {
// we don't really care if going back or forward. we already performed the logic here.
fragmentManager.removeOnBackStackChangedListener(this);
if ( newBackStackLength > nowCount ) { // user pressed back
fragmentManager.popBackStackImmediate();
}
}
}
});
}
我有四个片段:A、B、C、D。现在我从 A --> B 移动,所以我的代码将是
从 A 到 B
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new B())
.addToBackStack("A")
.commit();
现在从 B 到 C 所以代码将是
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new C())
.addToBackStack("B")
.commit();
现在从 C 到 D。但我不想将 C 包含在 backstack 中,因为在后退时我不想显示 C 片段。
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new D())
.commit();
现在,当我按下“返回”按钮时,它将完美地工作到 A。现在,如果我再次重复相同的过程。现在再次按下 From D Fragment,我将直接发送到 A 片段而不是 B 片段。你能找出我在上面的代码中犯的错误吗?
您必须为单个堆栈的 addToBackStack 提供相同的字符串值。
.replace(R.id.content_frame, new B())
.addToBackStack("stack")
.replace(R.id.content_frame, new C())
.addToBackStack("stack")
这里是BackStackChangedListener的代码。
public static void performNoBackStackTransaction( final FragmentManager fragmentManager, String tag, Fragment fragment) {
final int newBackStackLength = fragmentManager.getBackStackEntryCount() +1;
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment, tag)
.addToBackStack(tag)
.commit();
fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
int nowCount = fragmentManager.getBackStackEntryCount();
if (newBackStackLength != nowCount) {
// we don't really care if going back or forward. we already performed the logic here.
fragmentManager.removeOnBackStackChangedListener(this);
if ( newBackStackLength > nowCount ) { // user pressed back
fragmentManager.popBackStackImmediate();
}
}
}
});
}