1

我想在单击 textView 时删除片段并显示敬酒。我的代码显示吐司,但不删除片段。

我的方法:

public void hide(View view) {

        My_frag myFrag= new My_frag();
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();
        transaction.remove(myFrag);
        transaction.commit();
        Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_LONG)
                .show();
    }

My_frag 类:

public class My_frag extends android.support.v4.app.Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.my_frag_layout, container, false);
    }
}
4

2 回答 2

5

在某些时候,您必须创建并添加Fragment正确的?您正在您的方法中重新创建片段,hide(...)因此您正在尝试删除从未添加过的内容。当然,您可能已经添加了一个实例,但不是您要删除的实例。相反,Fragment fragToRemove在您的Activity. 当您创建片段(这是您所做的任何地方transaction.add(fragToRemove = new My_Frag);)时,您将持有一个实例。然后将您的更改transaction.remove(myFrag)transaction.remove(fragToRemove),它应该可以正常工作。

于 2012-07-29T20:41:46.777 回答
0

获取 Fragment Transaction 的实例,而不是在向活动添加片段时获取的实例,并在其上调用 remove 方法,并传递当时使用的相同的 Fragment 实例。

例子:

public class MainActivity extends AppCompatActivity {

    FragmentTransaction fragmentTransaction;
    BlankFragment blankFragment;

    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b = (Button) findViewById(R.id.activity_button);
        fragmentTransaction = getSupportFragmentManager().beginTransaction();

        blankFragment=new BlankFragment(); //Fragment instance 
        fragmentTransaction.add(R.id.main_layout,blankFragment).commit();
        b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.remove(blankFragment).commit(); //created different 
        }
    });

}

同样,您也可以在片段中执行操作,也可以在单击片段 X 的组件时删除片段 X。

于 2018-01-11T19:54:49.253 回答