Android 试图从屏幕上删除一个片段
我在一个活动中,我从那里启动了一个片段,它很好地出现在屏幕上,但我想使用按钮删除相同的片段。我看不出代码出了什么问题,我知道代码应该删除它,因为toast说“remove fragment”。有什么想法吗?谢谢Android 试图从屏幕上删除一个片段,android,android-fragments,onclicklistener,Android,Android Fragments,Onclicklistener,我在一个活动中,我从那里启动了一个片段,它很好地出现在屏幕上,但我想使用按钮删除相同的片段。我看不出代码出了什么问题,我知道代码应该删除它,因为toast说“remove fragment”。有什么想法吗?谢谢 public class ButtonClickHandler implements View.OnClickListener { public void onClick(View view) { if (showFrag == true){
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;
}
}
}
您以前没有调用addToBackStack:) 移除的步骤应该是:
getSupportFragmentManager().popBackStack();
无需创建局部变量,也无需创建事务。要弹出
backstack
的片段,需要先将其添加到backstack
。
您可以在调用fragmentTransaction.add(R.id.myfragment,myfragment)之后调用fragmentTransaction.addToBackStack(null)
代码>
还包括@coelho的注释-您不必启动FragmentTransaction来调用popBackStack()。要弹出backstack
的片段,您需要先将其添加到backstack。您可以在调用fragmentTransaction.add(R.id.myfragment,myfragment)之后调用fragmentTransaction.addToBackStack(null)
代码>调用popBackStack()不必启动碎片事务,谢谢@Varun!我没有意识到这一点,让我把它作为一个答案,让其他有同样问题的人也能从中受益。我刚刚意识到瓦伦也在评论中加入了这一点。
getSupportFragmentManager().popBackStack();