Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 试图从屏幕上删除一个片段_Android_Android Fragments_Onclicklistener - Fatal编程技术网

Android 试图从屏幕上删除一个片段

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){

我在一个活动中,我从那里启动了一个片段,它很好地出现在屏幕上,但我想使用按钮删除相同的片段。我看不出代码出了什么问题,我知道代码应该删除它,因为toast说“remove fragment”。有什么想法吗?谢谢

    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();