Intereting Posts
Как правильно реализовать lateinit с пользовательскими объектами класса для использования в onCreate () в android, избегая ошибки Property getter или setter expected Использование @ Component.Builder с параметрами конструктора Как получить текущее имя файла класса в kotlin Запись строки Android в файл занимает слишком много времени DexFile не содержит сгенерированных классов после добавления конфигурации Kotlin на Android 4.4 Как использовать «для» для этого случая Kotlin Reflection – проверка наличия свойства Android Studio 3 canary & Kotlin В чем разница при добавлении частного модификатора к аргументам в конструкторе Kotlin? Разрыв между SwipeRefreshLayout и RecyclerView Найти свойства с нулевым значением через отражение Принятие объявления о создании платформы при использовании интерфейса в kotlin Смещение рамки OpenCV приводит только к синему Есть ли еще более простой способ выражения анонимных классов в Котлине? База данных SQLite исчезла из эмулятора Android

Котлин говорит, что мой тип возврата ошибочен

Я хочу вернуть определенный фрагмент, но Котлин продолжает говорить, что PlusOneFragment и BlankFragment не являются фрагментами

Вот мой метод в моей MainActivity:

private fun getHomeFragment(): Fragment { when (navItemIndex) { 0 -> return PlusOneFragment() 1 -> return BlankFragment() else -> return PlusOneFragment() } } 

И это мое определение класса:

 class PlusOneFragment : Fragment() {…} 

Что мне нужно сделать, чтобы исправить это?

Solutions Collecting From Web of "Котлин говорит, что мой тип возврата ошибочен"

Похоже, комментарий от @ zsmb13 более правильный, если мой первый ответ не является реальным решением. Он сказал:

Вероятно, у вас есть разные фрагменты, импортированные в ваши файлы. Убедитесь, что вы используете один из библиотеки поддержки повсюду.

Вот о чем он говорит. На самом деле существует несколько различных версий Fragment, которые легко доступны разработчикам Android, один в пакете поддержки и один в стандартных библиотеках . Это легко и довольно часто, чтобы заставить их смутить. Я делал это сам, не один раз. Если вы импортируете одну из них в один файл и импортируете другую в другой файл, сообщение об ошибке, которое вы получите, может ввести в заблуждение, что-то об фрагменте не является фрагментом. Пройдите свой импорт и убедитесь, что вы импортируете тот же класс фрагментов во всем мире.

В Kotlin, когда это выражение, которое имеет возвращаемое значение. Вот как вы могли бы изменить свою функцию, используя эти знания:

 private fun getHomeFragment(): Fragment { return when (navItemIndex) { 0 -> PlusOneFragment() 1 -> BlankFragment() else -> PlusOneFragment() } } 

Однако вы можете использовать его в качестве инструкции следующим образом (очень похоже на инструкцию Java switch):

 private fun getHomeFragment(): Fragment { var result when (navItemIndex) { 0 -> result = PlusOneFragment() 1 -> result = BlankFragment() else -> result = PlusOneFragment() } return result } 

Кроме того, глядя на вашу логику, поскольку ничего, кроме 1 для navItemIndex, возвращает объект PlusOneFragment, вы можете упростить это значение if (что также является выражением в Kotlin) следующим образом:

 private fun getHomeFragment(): Fragment { return if (navItemIndex == 1) BlankFragment() else PlusOneFragment() } 

или даже

 private fun getHomeFragment(): Fragment = if (navItemIndex == 1) BlankFragment() else PlusOneFragment()