У меня есть Activity
с 3 EditText
с и пользовательский вид, который действует специализированная клавиатура для добавления информации в EditText
с.
В настоящее время я передаю Activity
в представление, чтобы я мог получить текущий отредактированный текст редактирования и обновить содержимое с пользовательской клавиатуры.
Есть ли способ сослаться на родительское действие и сфокусироваться на текущем, EditText
не передавая действие в представление?
Ответы:
Я только что вытащил этот исходный код из MediaRouter в официальную библиотеку поддержки, и пока он работает нормально:
источник
следующие методы могут помочь вам
Activity host = (Activity) view.getContext()
; иview.isFocused()
источник
getContext()
не всегда может возвращать объект Activity, если ваш View не вызывается из контекста Activity. Обязательно планируйте это заранее и предоставьте соответствующий запасной вариант.ContextThemeWrapper
кActivity
броску aClassCastException
. Вам понадобится способ развернуть базовый контекст (который должен быть Activity), который сам по себе опасен, поскольку существует нативная версия и версия v7ContextThemeWrapper
.Мне нравится это решение написано на Kotlin
Использование в
View
классеДекомпилированный код:
источник
Я взял Gomino «s ответ и изменить его , чтобы полностью соответствовать в myUtils.java , так что я могу использовать его везде , где и всякий раз , когда мне нужно. Надеюсь, кто-то найдет это полезным :)
источник
В Android 7+ представление больше не имеет доступа к вложенному действию, поэтому
view.getContext()
больше не может быть приведено к действию.Вместо этого приведенный ниже код работает в Android 7+ и 6:
источник
getContext
вероятно, вернет a,ContextThemeWrapper
так что представление больше не имеет прямого доступа к действию. Вместо этого вам придется рекурсивно искать в родительских контекстах, пока вы не найдете родительское действие или не воспользуетесь методом, который я предоставил в этом ответе.Свойство расширения Kotlin для View для извлечения родительской активности:
источник
if
сwhen
иisInstance()
с!is ContextWrapper
илиis Activity
@Override public boolean shouldOverrideUrlLoading (представление WebView, запрос WebResourceRequest) {if (request.getUrl (). GetHost (). StartWith ("pay.google.com")) {Intent intent = new Intent (Intent.ACTION_VIEW, request.getUrl ()); view.getContext () startActivity (намерение). вернуть истину; } ... ...}
источник