.beginTransaction().add 在 Android Studio 中不起作用

Posted

技术标签:

【中文标题】.beginTransaction().add 在 Android Studio 中不起作用【英文标题】:.beginTransaction().add not working in Android Studio 【发布时间】:2021-12-16 14:31:33 【问题描述】:

每个人。我目前正在学习在 android Studio 中切换片段,不幸的是我们的教科书已经过时了。当我尝试使用以下代码时:


        if (currentFragment == null) 
            val fragment = RootBeer()
            supportFragmentManager.beginTransaction().add(R.id.fragmentContainer, fragment).transaction.commit()

        

我收到以下错误:

<html>None of the following functions can be called with the arguments supplied:<br/>public open fun add(fragment: Fragment, tag: String?): FragmentTransaction defined in androidx.fragment.app.FragmentTransaction<br/>public open fun add(containerViewId: Int, fragment: Fragment): FragmentTransaction defined in androidx.fragment.app.FragmentTransaction

这是清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="edu.ivytech.rootbeerspring2021" >

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/MyTheme.DayNight" >
        <activity
            android:name=".MainActivity"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ScanBarcodeActivity" />

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="edu.ivytech.rootbeerspring2021.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true" >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/files" />
        </provider>
    </application>

</manifest>

和我的 fragmentContainer 代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragmentContainer"
    android:layout_
    android:layout_
    tools:context=".fragmentContainer">

</androidx.constraintlayout.widget.ConstraintLayout>

如果这里有任何其他对您有帮助的信息,请告诉我。 非常感谢!

【问题讨论】:

【参考方案1】:

使用replace 代替add

    if (fragment != null) 
                val transaction = supportFragmentManager.beginTransaction()
                transaction.replace(R.id.fragment_layout_id, fragment)
                transaction.commit()
            

【讨论】:

以上是关于.beginTransaction().add 在 Android Studio 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Entity Framework 6 DbContext.Database.BeginTransaction 中配置事务超时?

使用 getFragmentManager().beginTransaction() 在 Android 中为 FragmentTransaction 键入不匹配

android 切换fragment的两种方式

Hibernate的getTransaction()和beginTransaction()

Hibernate的getTransaction()和beginTransaction()

使用 getChildFragmentManager().beginTransaction() 时的空对象引用