gpt4 book ai didi

android - 如何替换不同类型的Fragments?

转载 作者:行者123 更新时间:2023-11-29 21:34:56 27 4
gpt4 key购买 nike

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

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

我的问题是我已经为 Cover 类定义了这个 fragment ,当我改变时我没有任何问题,但是当我想获取 View 并设置为我的类的一个变量时,函数 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"/>

主类变化

public void onClick(View v) {
if(isCoverFragment){
FragmentSongList fragmentSongList = new FragmentSongList();
transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.pruebaa, fragmentSongList);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.addToBackStack("LIST");
transaction.commit();
isCoverFragment=false;
}
else{
transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.pruebaa, fragmentCover);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.addToBackStack("COVER");
transaction.commit();
getSongCover();
isCoverFragment=true;
}

问题不在于更改,而是当我尝试创建 findViewById 时,可能是因为它没有加载与 FragmentSongList 关联的 View 。

最佳答案

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

在该 FrameLayout 中,您可以膨胀任何您想要的 Fragment。只需直接在 onCreate(...) 方法中膨胀您想要显示的第一个 fragment 。

<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>

这就是如何以编程方式将 fragment 膨胀到 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(...) 方法中的第一个 fragment 。

关于android - 如何替换不同类型的Fragments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18593724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com