我在一个活动中,我从那里启动一个片段,它在屏幕上显示很好,但我想使用该按钮然后删除相同的片段。我看不出代码有什么问题,我知道它会进入应该删除它的代码,因为toast说“删除片段”。有任何想法吗?感谢
public class ButtonClickHandler implements View.OnClickListener {
public void onClick(View view) {
if (showFrag == true){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment myFragment = new MyFragment();
fragmentTransaction.add(R.id.myfragment, myFragment);
fragmentTransaction.commit();
showFrag = false;
Toast.makeText(getBaseContext(), "Show Fragment", Toast.LENGTH_SHORT).show();
}
else if (showFrag == false){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
getSupportFragmentManager().popBackStack();
fragmentTransaction.commit();
Toast.makeText(getBaseContext(), "Remove Fragment", Toast.LENGTH_SHORT).show();
showFrag = true;
}
}
}
答案 0 :(得分:1)
你之前没有调用addToBackStack:)
fragmentTransaction.add(R.id.myfragment, myFragment);
fragmentTransaction.addToBackStack(null);
删除应该只是:
getSupportFragmentManager().popBackStack();
无需创建局部变量,也无需创建事务。
答案 1 :(得分:1)
要弹出backstack
的片段,您需要先将其添加到backstack
。
您可以在致电fragmentTransaction.addToBackStack(null)
fragmentTransaction.add(R.id.myfragment, myFragment);
来完成此操作
还包括@coelho的评论 - 您不必启动FragmentTransaction来调用popBackStack()。