Как получить хостинг Activity из представления?

У меня есть Activity с 3 EditText и пользовательское представление, которое действует как специализированная клавиатура для добавления информации в EditTextы.

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

Есть ли способ сослаться на родительскую активность и получить сфокусированный в данный момент EditText без передачи активности в представление?

174
задан MonikaKumarJethani 23 April 2019 в 01:40
поделиться

1 ответ

Мне нравится это решение, записанное в использовании Kotlin

tailrec fun Context?.activity(): Activity? = when (this) {
    is Activity -> this
    else -> (this as? ContextWrapper)?.baseContext?.activity()
}

в View класс

context.activity()

Скомпилированный код:

public static final Activity activity(Context context) {
    while (!(context instanceof Activity)) {
        if (!(context instanceof ContextWrapper)) {
            context = null;
        }
        ContextWrapper contextWrapper = (ContextWrapper) context;
        if (contextWrapper == null) {
            return null;
        }
        context = contextWrapper.getBaseContext();
        if (context == null) {
            return null;
        }
    }
    return (Activity) context;
}
2
ответ дан 23 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: