Java 用片段实现后台堆栈
我试图在使用片段时实现一个后堆栈,但当使用“后退”按钮时,我会一直从应用程序中转到主屏幕 活动打开片段A;片段A有一个可点击的文本视图,可以打开片段B(这是可行的)。回击应该会将我返回到片段A,但它会将我带到主屏幕 下面是活动对在Java 用片段实现后台堆栈,java,android,android-fragments,fragment-backstack,Java,Android,Android Fragments,Fragment Backstack,我试图在使用片段时实现一个后堆栈,但当使用“后退”按钮时,我会一直从应用程序中转到主屏幕 活动打开片段A;片段A有一个可点击的文本视图,可以打开片段B(这是可行的)。回击应该会将我返回到片段A,但它会将我带到主屏幕 下面是活动对在onCreate中打开片段A的调用: FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentMa
onCreate
中打开片段A的调用:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_layout_container, new FragmentLogin(), "fragment_login")
.addToBackStack("login_screen")
.commit();
Log.d("Back", getFragmentManager().getBackStackEntryCount() +" <- Entry Count at LoginActivity.onCreate" );
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment\u布局\u容器,新FragmentLogin(),“fragment\u登录”)
.addToBackStack(“登录屏幕”)
.commit();
Log.d(“Back”,getFragmentManager().getBackStackEntryCount()+”像这样试试
public void replaceFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
if (addToBackStack) {
transaction.addToBackStack(null);
} else {
getFragmentManager().popBackStack(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
transaction.replace(R.id.fragment_layout_container, fragment);
transaction.commitAllowingStateLoss();
getFragmentManager().executePendingTransactions();
}
就这样用,
replaceFragment(new FragmentForgottenPassword(), true);
有一个GitHub库可以为您完成这项工作!
每当您显示任何新片段时,只需使用以下代码将该片段推送到堆栈中即可。
//这里这个片段是我们的第一个片段
homeListFragment=新的homeListFragment();
fragmentStack.push(homeListFragment);
它还有许多其他堆栈选项。在您的活动中使用此选项,它会弹出已添加到backstack的片段
@Override
public void onBackPressed()
{
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
@Override
public void onBackPressed()
{
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}