如何替换不同类型的碎片?

时间:2013-09-03 13:34:09

标签: android android-fragments fragmenttransaction fragmentmanager

早上好。我正在开发一个应用程序,其中我有一个从活动扩展的主要布局,在这个内部我有一个数据类型的一个片段,在我的例子中是FragmentCover(它是一个类)。

在我的应用程序中,我按下一个按钮,我想要更改此片段布局,以便从片段扩展,但不同类型,称为SongList。

我的问题是我已经为Cover类定义了这个片段,当我改变时我没有任何问题,但是当我想获取视图并设置为我的类的一个变量时,funciont {{ 1}}它是null并且它给了我错误。

我把它放在这里。

布局

songList = (ListView) getView().findViewById(R.id.songList);

主要类更改

<fragment android:name="es.xxx.ui.FragmentCover"
    android:id="@+id/pruebaa"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/songBar"
    android:layout_below="@id/header"/>

问题不在于改变,当我尝试制作findViewById时,可能是因为它没有加载与FragmentSongList相关联的视图。

1 个答案:

答案 0 :(得分:1)

您需要在布局文件中使用FrameLayout,而不是在.xml中定义片段

进入FrameLayout,你可以膨胀你想要的任何碎片。 只需直接在您的onCreate(...)方法中显示您想要显示的第一个片段。

<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">       
        </FrameLayout>

这是以编程方式将片段扩展到FrameLayout中。

 FragmentSongList fragmentSongList = new FragmentSongList();
 FragmentTransaction transaction = getFragmentManager().beginTransaction();
         transaction.replace(R.id.content_frame, fragmentSongList);
         transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
         transaction.addToBackStack("LIST");
         transaction.commit();

您可以将代码保留在onClick()方法中,只需将ID更改为“content_frame”。此外,如上所述,您将必须膨胀应该在onCreate(...)方法中显示的第一个片段。