#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. дает