检查android中布局中是否显示任何片段?
在我的应用程序中,有五个按钮。当按下curresponding按钮时,片段将加载到线性布局中。我想要的是,如果按下任何按钮,布局中的当前片段应断开连接,并且应放置与按钮对应的片段。我需要一种常用方法来移除先前放置的片段。我知道我们可以使用其id专门移除片段。我不知道需要它。我想要一个通用的方法来删除片段。这是我的java类检查android中布局中是否显示任何片段?,android,android-fragments,Android,Android Fragments,在我的应用程序中,有五个按钮。当按下curresponding按钮时,片段将加载到线性布局中。我想要的是,如果按下任何按钮,布局中的当前片段应断开连接,并且应放置与按钮对应的片段。我需要一种常用方法来移除先前放置的片段。我知道我们可以使用其id专门移除片段。我不知道需要它。我想要一个通用的方法来删除片段。这是我的java类 Button b1, b2, b3, b4, b5; // Declare Variables ActionBar mActionBar
Button b1, b2, b3, b4, b5;
// Declare Variables
ActionBar mActionBar;
ViewPager mPager;
FragmentManager fm;
setContentView(R.layout.activity_main);
fm = getSupportFragmentManager();b1 = (Button) findViewById(R.id.fbbutton1);
b2 = (Button) findViewById(R.id.fbbutton2);
b3 = (Button) findViewById(R.id.fbbutton3);
b4 = (Button) findViewById(R.id.fbbutton4);
b5 = (Button) findViewById(R.id.fbbutton5);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab1 f1 = new FragmentTab1();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragmentgroup, f1, "A");
ft.commit();
}
});
b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (getSupportFragmentManager().findFragmentById(R.id.detail_screen) != null) {
getSupportFragmentManager().popBackStack();
} //to do add fragment
FragmentTab2 f2 = new FragmentTab2();
FragmentTransaction ft = fm.beginTransaction();
// fm.popBackStack(fm.getBackStackEntryCount(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
// - Use FragmentManager.getBackStackEntryCount()/getBackStackEntryAt().getId() to retrieve the ID of the first entry on the back stack, and FragmentManager.popBackStack(int id, FragmentManager.POP_BACK_STACK_INCLUSIVE).
// ft.replace(R.id.fragmentgroup, f2);
ft.add(R.id.fragmentgroup, f2, "B");
ft.commit();
}
});
b3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab3 f3 = new FragmentTab3();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragmentgroup, f3, "C");
ft.commit();
}
});
b4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab4 f4 = new FragmentTab4();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragmentgroup, f4, "D");
ft.commit();
}
});
b5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab5 f5 = new FragmentTab5();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragmentgroup, f5, "E");
ft.commit();
}
});
在我的xml中显示片段的布局
<LinearLayout
android:id="@+id/fragmentgroup"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#F2A4A9"
android:orientation="horizontal" >
您需要一种通用方法来替换与按钮单击对应的片段。 因此,您可以使用
FragmentTransaction
中的replace
方法来完成常用方法中的工作
代码将是
public void replaceAFragment(int frag_container, Fragment aFragment, String tag) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(frag_container, aFragment, tag);
transaction.commit();
}
当你想加载一个片段时,你不需要移除它,只需要用你的新片段替换它
b3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab3 f3 = new FragmentTab3();
replaceAFragment(R.id.fragmentgroup,f3,"FRAGMENT THREE");
}
});
b4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab4 f4 = new FragmentTab4();
replaceAFragment(R.id.fragmentgroup,f4,"FRAGMENT FOUR");
}
});
b5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTab5 f5 = new FragmentTab5();
replaceAFragment(R.id.fragmentgroup,f5,"FRAGMENT FIVE");
}
});
现在您有了一个放置片段的通用方法。你也可以这样做,
detach
和remove
与标签一起放在里面。@Bharath-Mg谢谢你的回答。但是碎片在传递到另一个碎片时会被销毁。我不需要销毁它。我要将碎片拆下,并显示为相同,当传递到另一个片段后返回到片段时。你明白我的意思了吗?你可以使用hide
和show
方法来实现你想要的。代替add
您可以检查它是否已经被添加,只需hide
或show
新片段。@Bharath Mg用于隐藏片段,它需要指定片段。当我选择一个片段时,只需隐藏/删除前一个片段,无需特别提及该片段。我就是这么问的?