Подтвердить что ты не робот

Несколько ошибок в моих фрагментах после обновления библиотеки поддержки до 27.0.0

После обновления библиотеки поддержки от v-26.1.0 до v-27.0.0 Несколько ошибок в моих фрагментах.

Вот список некоторых этих ошибок:

Ошибка: умное нажатие на "Bundle" невозможно, потому что "аргументы" - это изменяемое свойство, которое могло быть изменено к этому времени.

Ошибка: 'onCreateView' ничего не отменяет

Ошибка: "onViewCreated" не отменяет ничего

Ошибка: тип несоответствия: выводимый тип - вид? но View был Ожидается,

Ошибка: тип несоответствия: выводный тип - это контекст? но Контекст ожидалось

Ошибка: Тип несоответствия: выводный тип - FragmentActivity? но Предполагался контекст

Ошибка: Тип несоответствия: выводный тип - FragmentActivity? но Предполагался контекст

из шаблона студии android для пустого фрагмента.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (arguments != null) {
        mParam1 = arguments.getString(ARG_PARAM1)
        mParam2 = arguments.getString(ARG_PARAM2)
    }
}

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater!!.inflate(R.layout.fragment_blank, container, false)
}

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
}
4b9b3361

Ответ 1

Основная причина всех этих ошибок заключается в том, что в библиотеке поддержки v-27.0.0 @Nullable и @NonNull добавлены аннотации.
и поскольку язык kotlin знает об ошибке и имеет другой тип для Nullable и NonNull, в отличие от Java.
без этих аннотаций, компилятор не имеет никакого различия между ними, и Android-студия старалась изо всех сил сделать правильный тип.

TL; DR: измените типы, чтобы правильно отражать статус nullability.


Ошибка: умное нажатие на "Bundle" невозможно, потому что "аргументы" - это изменяемое свойство, которое могло быть изменено к этому времени.

изменить arguments.getString(ARG_NAME) == > arguments?.getString(ARG_NAME) ?: ""


Ошибка: 'onCreateView' ничего не отменяет

chane:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View?

== >

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?

Ошибка: "onViewCreated" не отменяет ничего

изменения:

override fun onViewCreated(view: View?, savedInstanceState: Bundle?)

== >

override fun onViewCreated(view: View, savedInstanceState: Bundle?)

Ошибка: тип несоответствия: выводный тип - это контекст? но Контекст ожидалось

если контекст передается как аргумент методу, просто используйте быстрое исправление, чтобы заменить getContext() на getContext()?.let{}
то же самое относится к короткой версии kotlin context.

else, если используется для вызова некоторого метода, замените getContext().someMethod() на getContext()?.someMethod()

то же самое относится к короткой версии kotlin context?.someMethod().


Ошибка: Тип несоответствия: выводный тип - FragmentActivity? но Предполагался контекст

используйте исправление предыдущей ошибки.