我想在单击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);
}
}
答案 0 :(得分:4)
在某些时候,您必须创建并添加Fragment
正确吗?您正在hide(...)
方法中重新创建片段,因此您尝试删除从未添加过的内容。当然,您可能已添加了 实例,但未添加您要删除的实例。
而是在Fragment fragToRemove
中创建全局变量Activity
。当您创建片段时(您可以在哪里transaction.add(fragToRemove = new My_Frag);
),您将拥有一个实例。然后将transaction.remove(myFrag)
更改为transaction.remove(fragToRemove)
,它应该可以正常工作。
答案 1 :(得分: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.