Библиотека поддержки Android 27.1.0 новые методы requireActivity (), requireContext ()

Согласно журналу изменений библиотеки поддержки и документации класса Fragment (https://developer.android.com/reference/android/support/v4/app/Fragment.html), теперь есть новые методы, такие как requreActivity () и requireContext ().

Какова цель этих методов по сравнению с getActivity () и getContext (), поскольку они все еще могут генерировать исключения IllegalStateExceptions? Предпочтительнее ли это возвращать null, если действие или контекст не могут быть найдены? И я должен просто заменить каждый getActivity () на requireActivity ()?

26
0
10 122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По сути, это метод, который всегда возвращает ненулевой объект или генерирует исключение. Это все.

Из документов:

Теперь у фрагментов есть методы requireContext (), requireActivity (), requireHost () и requireFragmentManager (), которые возвращают объект NonNull эквивалентных методов get или генерируют исключение IllegalStateException.

https://developer.android.com/topic/libraries/support-library/revisions.html#27-1-0

Этот вопрос SO также ссылается на причины этого:

«Методы getActivity и getContext возвращают типы, допускающие значение NULL, потому что, когда Fragment не прикреплен к Activity, эти методы уже вернули значение NULL. В поведении нет никаких изменений, он просто явно отмечен, так что вы можете безопасно обрабатывать его».

https://stackoverflow.com/a/47253335/3268303

Из Reddit:

"Я обновился с поддержки v26 до поддержки v27, и мне пришлось добавить кучу !! s в методы активности / контекста во фрагментах, где я, очевидно, не ожидаю, что это будет null. Приятно иметь методы require *, которые делают это за меня без уродливых !! s. "

https://www.reddit.com/r/androiddev/comments/80ork8/support_library_2710_has_been_released/duxp75h/

Итак, если бы я использовал этот метод requireContext(), нужно ли было бы обернуть его пробной ловушкой? или обрабатывает исключение самостоятельно.

Smile 25.07.2018 11:54

Это в основном для пользователей Kotlin, чтобы разрешить получение ненулевой ссылки (если, конечно, она не вызывается в неподходящий момент)

AntekM 02.10.2018 23:02

@Smile вся цель - вызвать исключение. если вы этого не хотите, просто используйте getContext и самостоятельно обработайте нулевой регистр.

M.kazem Akhgary 11.12.2018 06:56

Другие вопросы по теме