使用一个片段视图替换多个片段类

时间:2013-12-11 09:28:45

标签: java android android-fragments

我在理解和使用片段时遇到一些麻烦我有3个按钮和1个片段视图。使用按钮作为Tabs我试图在单击按钮时给片段一个特定的类我做的是:

 <LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/linearLayout1"
    android:layout_alignTop="@+id/linearLayout1" >

    <Button
        android:id="@+id/Tab1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Tab 1" android:background="@drawable/btn"/>

    <Button
        android:id="@+id/Tab2"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Tab 2" android:onClick="switchToTab2" />

    <Button
        android:id="@+id/Tab3"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Tab 3" android:onClick="switchToTab3" />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/linearLayout1"
    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/linearLayout1"
    android:layout_below="@+id/linearLayout1" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.example.newproject.fragmentclass"
        android:layout_width="match_parent"
        android:layout_height="394dp" />



</LinearLayout>

java class:

fragmentclass frt1;
fragmentclass2 frt2;
fragment3class frt3;
FragmentTransaction ft;

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_tabs_exp);

        ft = getSupportFragmentManager().beginTransaction();
        frt1 = new fragmentclass();                
        frt2 = new fragmentclass2();
        frt3 = new fragment3class();

        //ft.add(R.id.fragment1,frt1); 
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.fragment_tabs_exp, menu);
    return true;
}
public void switchToTab2 (View v){
    ft.replace(R.id.fragment1, frt2).commit();
}

public void switchToTab3 (View v) {
    ft.replace(R.id.fragment1, frt3).commit();
}

当我点击button2时,片段class2成功可见,但片段的默认类仍然可见,无论如何都要隐藏它并使新的片段类处于活动状态

2 个答案:

答案 0 :(得分:1)

从XML文件中删除fragment1(默认情况下,容器在布局创建时为空)并从代码中添加它(即在父片段的onCreateView()或活动的onCreate()中),因为如果片段是XML布局文件的一部分,则不能从层次结构中删除片段。

如果您计划只有一个孩子,我也会将容器更改为FrameLayout而不是LinearLayout

答案 1 :(得分:1)

在xml文件中添加片段会使您的应用程序保持静态,并且无法动态更改它。

如果要动态添加片段,则需要在xml文件中添加FrameLayout并在该布局中动态加载所有片段,并在逐个加载片段时将其替换为另一个片段。

在布局中进行以下更改:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/linearLayout1"
    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/linearLayout1"
    android:layout_below="@+id/linearLayout1" >

    <FrameLayout
        android:id="@+id/fragment1"
        android:layout_width="match_parent"
        android:layout_height="394dp" />

</LinearLayout>