Tengo un Activitycon 3 EditTextsy una vista personalizada que actúa un teclado especializado para agregar información en el EditTexts.
Actualmente estoy pasando la Activityvista a la vista para poder obtener el texto de edición actualmente enfocado y actualizar los contenidos desde el teclado personalizado.
¿Hay alguna manera de hacer referencia a la actividad principal y obtener el foco actual EditTextsin pasar la actividad a la vista?

Respuestas:
Acabo de extraer ese código fuente del MediaRouter en el biblioteca de soporte oficial y hasta ahora funciona bien:
fuente
los siguientes métodos pueden ayudarlo
Activity host = (Activity) view.getContext(); yview.isFocused()fuente
getContext()puede que no siempre devuelva un objeto Actividad si su Vista no se llama desde un contexto Actividad. Asegúrese de planificar esto con anticipación y proporcionar una alternativa adecuada.ContextThemeWrappertoActivityarrojará unClassCastException. Necesitaría una forma de desenvolver el contexto base (que debería ser una Actividad), que en sí mismo es peligroso ya que hay una versión nativa y v7 deContextThemeWrapper.Me gusta esta solución escrita en Kotlin.
Uso en
ViewclaseCódigo descompilado:
fuente
Tomé Gomino 's respuesta y lo modificó para encajar perfectamente en myUtils.java para que pueda utilizarlo en cualquier lugar y siempre que necesito. Espero que alguien lo encuentre útil :)
fuente
En Android 7+, la vista ya no tiene acceso a la actividad adjunta, por lo que
view.getContext()ya no se puede transmitir a una Actividad.En cambio, el siguiente código funciona en Android 7+ y 6:
fuente
getContextprobablemente devolverá un mensajeContextThemeWrapperpara que la Vista ya no tenga acceso directo a la Actividad. En su lugar, debe buscar recursivamente los contextos principales hasta encontrar la Actividad principal o utilizar el método que proporcioné en esta respuesta.Propiedad de extensión de Kotlin para Ver para recuperar la actividad principal:
fuente
ifconwhenyisInstance()con!is ContextWrapperois Activity@Override public boolean shouldOverrideUrlLoading (vista WebView, solicitud WebResourceRequest) {if (request.getUrl (). GetHost (). ComienzaWith ("pay.google.com")) {Intención de intención = nueva Intención (Intent.ACTION_VIEW, request.getUrl ()); view.getContext (). startActivity (intento); volver verdadero; } ... ...}
fuente