1

我在一个活动中,我从那里启动一个片段,它出现在屏幕上很好,但我想使用按钮然后删除相同的片段。我看不出代码有什么问题,我知道它正在进入应该删除它的代码,因为 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;
        }
}


}
4

2 回答 2

1

要弹出一个片段,backstack您需要backstack先将其添加到。你可以在打电话fragmentTransaction.addToBackStack(null)后打电话来做到这一点fragmentTransaction.add(R.id.myfragment, myFragment);

还包括@coelho 的评论 - 您不必启动 FragmentTransaction 来调用 popBackStack()。

于 2013-10-24T22:51:04.350 回答
1

您之前没有调用 addToBackStack :)

fragmentTransaction.add(R.id.myfragment, myFragment);
fragmentTransaction.addToBackStack(null);

删除应该只是:

getSupportFragmentManager().popBackStack(); 

无需创建局部变量,也无需创建事务。

于 2013-10-24T22:50:01.167 回答