Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查android中布局中是否显示任何片段?_Android_Android Fragments - Fatal编程技术网

检查android中布局中是否显示任何片段?

检查android中布局中是否显示任何片段?,android,android-fragments,Android,Android Fragments,在我的应用程序中,有五个按钮。当按下curresponding按钮时,片段将加载到线性布局中。我想要的是,如果按下任何按钮,布局中的当前片段应断开连接,并且应放置与按钮对应的片段。我需要一种常用方法来移除先前放置的片段。我知道我们可以使用其id专门移除片段。我不知道需要它。我想要一个通用的方法来删除片段。这是我的java类 Button b1, b2, b3, b4, b5; // Declare Variables ActionBar mActionBar

在我的应用程序中,有五个按钮。当按下curresponding按钮时,片段将加载到线性布局中。我想要的是,如果按下任何按钮,布局中的当前片段应断开连接,并且应放置与按钮对应的片段。我需要一种常用方法来移除先前放置的片段。我知道我们可以使用其id专门移除片段。我不知道需要它。我想要一个通用的方法来删除片段。这是我的java类

   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用于隐藏片段,它需要指定片段。当我选择一个片段时,只需隐藏/删除前一个片段,无需特别提及该片段。我就是这么问的?