É possível chamar o método definido em Activity
from ListAdapter
?
(Quero fazer um Button
in list's
row e quando este botão for clicado deve executar o método, que está definido na Activity correspondente. Tentei setar onClickListener
no meu ListAdapter
mas não sei como chamar esse método, qual é o seu caminho. ..)
quando usei Activity.this.method()
, recebo o seguinte erro:
No enclosing instance of the type Activity is accessible in scope
Qualquer ideia ?
android
list
adapter
addressing
user1602687
fonte
fonte
Respostas:
Sim você pode.
No adaptador, adicione um novo campo:
No construtor do adaptador, adicione o seguinte código:
No getView (...) do adaptador:
substitua por seus próprios nomes de classe onde você vê seu código, sua atividade etc.
Se você precisar usar este mesmo adaptador para mais de uma atividade:
Crie uma interface
Implemente essa interface nas atividades de que você precisa para ter essa funcionalidade de chamada de método.
Então, em Adapter getView (), chame como:
Você terminou. Se você precisar usar este adaptador para atividades que não requerem este mecanismo de chamada, o código não será executado (se a verificação falhar).
fonte
Você pode fazer desta forma:
Interface de declaração:
Deixe sua atividade implementá-la:
Em seguida, passe sua atividade para ListAdater:
E em algum lugar do adaptador, quando você precisar chamar esse método Activity:
fonte
Original:
Eu entendo a resposta atual, mas precisava de um exemplo mais claro. Aqui está um exemplo do que usei com um
Adapter
(RecyclerView.Adapter) e umActivity
.Em sua atividade:
Isso implementará o
interface
que temos em nossoAdapter
. Neste exemplo, ele será chamado quando o usuário clicar em um item noRecyclerView
.Em seu adaptador:
No
Activity
, iniciamos nossoAdapter
e passamos isso como um argumento para o construtor. Isso iniciará nossointerface
método de retorno de chamada. Você pode ver que usamos nosso método de retorno de chamada para cliques do usuário.fonte
EventBus
sugerida?Básico e simples.
Em seu adaptador, basta usar isso.
((YourParentClass) context).functionToRun();
fonte
Mais uma maneira é:
Escreva um método em seu adaptador, digamos public void callBack () {}.
Agora, ao criar um objeto para o adaptador na atividade, substitua este método. O método de substituição será chamado quando você chamar o método no adaptador.
fonte
Para Kotlin:
Em seu adaptador, basta ligar
fonte
esta condição irá permitir que você execute algo se a Activity que tem as
GroupView
visualizações solicitantes dogetView()
método de seuadapter
foryourActivity
NOTA:
parent
é esse GroupViewfonte
getView()
método ... então obtemos o contexto desse GroupView e o examinamos por meio da condição acimaEm Kotlin, agora existe uma maneira mais limpa de usar funções lambda, sem necessidade de interfaces:
fonte