android 删除片段不起作用

yizd12fk  于 2023-06-04  发布在  Android
关注(0)|答案(3)|浏览(191)

我想在单击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);
    }
}
rta7y2nd

rta7y2nd1#

在某些时候,您必须创建并添加Fragment,对吗?您正在hide(...)方法中重新创建片段,因此您正在尝试删除从未添加的内容。当然,您可能添加了 an 示例,但没有添加要删除的 the 示例。相反,在Activity中创建一个全局变量Fragment fragToRemove。当您创建片段时(也就是您执行transaction.add(fragToRemove = new My_Frag);的地方),您将持有一个示例。然后将您的transaction.remove(myFrag)更改为transaction.remove(fragToRemove),它应该可以正常工作。

gywdnpxw

gywdnpxw2#

获取Fragment Transaction的示例,而不是在向Activity添加fragment时获取的示例,并对其调用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。

5hcedyr0

5hcedyr03#

片段可以被“附加”和“添加”,你需要使用相反的操作,根据FragmentPagerAdapter::instantiateItem

manager.beginTransaction().remove(fragment).commit()

manager.beginTransaction().detach(it).commit()

就像这样:

fragmentList.forEach {
        manager.beginTransaction().remove(it).commit()
        manager.beginTransaction().detach(it).commit()
    }

相关问题