早上好。我正在开发一个应用程序,其中我有一个从活动扩展的主要布局,在这个内部我有一个数据类型的一个片段,在我的例子中是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相关联的视图。
答案 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(...)方法中显示的第一个片段。