我想在单击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);
}
}
3条答案
按热度按时间rta7y2nd1#
在某些时候,您必须创建并添加
Fragment
,对吗?您正在hide(...)
方法中重新创建片段,因此您正在尝试删除从未添加的内容。当然,您可能添加了 an 示例,但没有添加要删除的 the 示例。相反,在Activity
中创建一个全局变量Fragment fragToRemove
。当您创建片段时(也就是您执行transaction.add(fragToRemove = new My_Frag);
的地方),您将持有一个示例。然后将您的transaction.remove(myFrag)
更改为transaction.remove(fragToRemove)
,它应该可以正常工作。gywdnpxw2#
获取Fragment Transaction的示例,而不是在向Activity添加fragment时获取的示例,并对其调用remove方法,并传递当时使用的同一个Fragment示例。
示例:
以同样的方式,你也可以在片段中做,也可以在点击片段X的组件时删除片段X。
5hcedyr03#
片段可以被“附加”和“添加”,你需要使用相反的操作,根据FragmentPagerAdapter::instantiateItem
或
就像这样: