Eu tenho um Activity
com 3 se EditText
uma exibição personalizada que atua como um teclado especializado para adicionar informações aos EditText
s.
Atualmente, estou passando a Activity
visualização para que eu possa obter o texto de edição atualmente focado e atualizar o conteúdo do teclado personalizado.
Existe uma maneira de fazer referência à atividade pai e obter o foco atual EditText
sem passar a atividade para a exibição?
Respostas:
Eu apenas peguei esse código fonte do MediaRouter na biblioteca oficial de suporte e, até agora, ele funciona bem:
fonte
Os seguintes métodos podem ajudá-lo
Activity host = (Activity) view.getContext()
; eview.isFocused()
fonte
getContext()
nem sempre um objeto de Atividade pode retornar se sua Visualização não for chamada de um contexto de Atividade. Planeje isso com antecedência e forneça um retorno adequado.ContextThemeWrapper
paraActivity
lançar aClassCastException
. Você precisaria de uma maneira de desembrulhar o contexto base (que deveria ser uma atividade), o que por si só é perigoso, pois há uma versão nativa e a v7ContextThemeWrapper
.Eu gosto desta solução escrita em Kotlin
Uso na
View
aulaCódigo descompilado:
fonte
Tomei Gomino 's resposta e modificado para se encaixar perfeitamente na myUtils.java para que eu possa usá-lo onde e quando eu preciso. Espero que alguém ache útil :)
fonte
No Android 7+, a visualização não tem mais acesso à atividade anexa, portanto,
view.getContext()
não pode mais ser convertida em uma atividade.Em vez disso, o código abaixo funciona no Android 7+ e 6:
fonte
getContext
provavelmente retornará umContextThemeWrapper
para que o View não tenha mais acesso direto à Atividade. Em vez disso, você deve procurar recursivamente os contextos pai até encontrar a Atividade pai ou usar o método que forneci nesta resposta.Propriedade de extensão Kotlin para o View para recuperar a atividade pai:
fonte
if
comwhen
eisInstance()
com with!is ContextWrapper
ouis Activity
@Override público booleano shouldOverrideUrlLoading (exibição na WebView, solicitação WebResourceRequest) {if (request.getUrl (). GetHost (). ()); view.getContext (). startActivity (intent); return true; } ... ...}
fonte