добавить (), определенный в android androidx.фрагмент.приложение.фрагменттранзакция

#java #android #kotlin

Вопрос:

Не удается вызвать некоторые методы FragmentTransaction. Например, я хочу добавить пустой фрагмент в FragmentContainerView, что приводит к следующей ошибке.

   supportFragmentManager.commit {
       setReorderingAllowed(true)
       add<BlankFragment>(mainBinding.fragmentContainer)
  }
    
 

введите описание изображения здесь

Это моя сборка.gradle

 dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'


implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'

// Glide
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

// Fragment
def fragment_version = "1.3.6"
implementation "androidx.fragment:fragment-ktx:$fragment_version"
 

}

Заранее спасибо.

Ответ №1:

Овеществленная add перегрузка-это метод расширения Kotlin ( FragmentTransaction сам по себе написан на Java, поэтому он не может поддерживать этот синтаксис сам по себе), что означает, что вам необходимо импортировать расширение Kotlin:

 import androidx.fragment.app.add
 

Комментарии:

1. Спасибо, я создал новый проект, все работает отлично. Но я получаю эту ошибку в своем текущем проекте, я не знаю, почему

2. Итак…вы добавили импорт?

3. Отлично, если этот ответ решил вашу проблему, вы должны принять ответ, чтобы удалить этот вопрос из набора вопросов, на которые нет ответов.

Ответ №2:

Предполагается, что вы должны включить Blank Fragment его в add метод.

 private fun loadFragmentBlank(id: Int) {
    val bun = Bundle()
    bun.apply {
        putInt(Constant.ID, id)
    }
    val blankFragment = BlankFragment()
    blankFragment.arguments = bun
    val fragmentManager = supportFragmentManager
    val fragmentTransaction: FragmentTransaction =
        fragmentManager.beginTransaction()
    fragmentTransaction.add(
        mainBinding.fragmentContainer,
        blankFragment,
        Constant.TAG_FRAGMENT_BLANK
    )
    fragmentTransaction.commit()
}
 

Комментарии:

1. дает