Tengo un Activity
con 3 EditText
sy una vista personalizada que actúa un teclado especializado para agregar información en el EditText
s.
Actualmente estoy pasando la Activity
vista 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 EditText
sin 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.ContextThemeWrapper
toActivity
arrojará 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
View
claseCó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
getContext
probablemente devolverá un mensajeContextThemeWrapper
para 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
if
conwhen
yisInstance()
con!is ContextWrapper
ois 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