[ОБНОВЛЕНИЕ] Проблема в том, что метод может получить FragmentManager
, но это должно быть не спасибо, взгляните на ошибку и не спасибо, символ Котлина
FragmentManager!
Так что вы можете сделать
fm?.let {newFragment.show(fm, "your tag")}
Пожалуйста, смотрите комментарии в ответе Нушада Хасана
Вы передаете FragmentManager
методу, ему нужны FragmentTransaction
и a String
в виде тега:
val transaction = supportFragmentManager.beginTransaction()
newFragment.show(transaction, "SOME_TAG")
Пара предложений:
Вы можете сделать DialogFragment
больше kotliny , используя стандартные функции Kotlin
companion object {
private const val KEY = "param1"
@JvmStatic
fun newInstance(param1: String) =
ExampleDialogFragment().apply {
arguments = Bundle().apply {
putString(KEY, param1)
}
}
}
Хороший пример можно получить, создав Fragment
с помощью мастера Android Studio и проверив параметр фабричного метода.
Кроме того, поскольку этот тег предназначен для DialogFragment
васможет сделать его общедоступной константой:
companion object {
const val TAG = "TAG"
}
И, возможно, вы захотите дважды проверить, присутствует ли фрагмент диалога, и удалить его, чтобы фактически работать как свежий диалог
val transaction = supportFragmentManager.beginTransaction()
val previous = supportFragmentManager.findFragmentByTag(ExampleDialogFragment.TAG)
if (previous != null) {
transaction.remove(previous)
}
transaction.addToBackStack(null)
val dialogFragment = ExampleDialogFragment.newInstance("parameter")
dialogFragment.show(transaction, ExampleDialogFragment.TAG)