Android:如何将片段加载到FrameLayout中

2022-09-04 01:16:59

我从Android开始,在我的项目中,我使用了这个BottomBar。喜欢它,效果很好。我的应用程序的代码与他在教程中使用的代码几乎相同,唯一不同的是我的扩展从.MainActivityAppCompatActivity

现在我试图做的是加载以下片段:FrameLayout

<!-- This could be your fragment container, or something -->
<FrameLayout
    android:id="@+id/contentContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/bottomBar"
    />

为此,我正在尝试这段代码,我发现谷歌搜索了我的问题的答案:

// Create new fragment and transaction
QrCodeFragment newFragment = new QrCodeFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack if needed
transaction.replace(R.id.bottomBar, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

该行正在抱怨newFragment的类型,应该是。我的二维码类:transaction.replace(R.id.bottomBar, newFragment);android.app.Fragmentpublic class QrCodeFragment extends Fragment

由于我今天从Android开始,我对我是否在做正确的事情感到困惑。如果我真的应该在FrameLayout中加载片段,如果是这样,我做错了什么,我无法加载它。我知道这是我的片段的类型,但我不知道如何使用所需的类型创建它。我使用Android Studio > New > Fragment > Fragment (Blank)

感谢您的任何帮助


更新:我在这篇文章中找到了我的错误的解决方案,但即使没有错误,我仍然看不到片段。


答案 1

首先,您在Spiece交易行中有一个错误,根据您的布局应该是:

transaction.replace(R.id.contentContainer, newFragment); // not R.id.bottomBar

其次,您应该使用 supportFragmentManager 而不是 fragmentManager 来处理支持片段,因此请通过以下方式实现:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.contentContainer, newFragment);
transaction.addToBackStack(null);
transaction.commit();

答案 2

在我的情况下,我通过使用

androidx.fragment.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

替换您的

片段交易


推荐