Est-il possible d'appeler une méthode définie dans Activity
from ListAdapter
?
(Je veux faire Button
en list's
ligne et lorsque ce bouton est cliqué, il est conseillé d' effectuer la méthode, qui est définie dans l' activité correspondante. J'essayé de mettre onClickListener
dans mon ListAdapter
mais je ne sais pas comment appeler cette méthode, ce qui est son chemin. ..)
quand j'ai utilisé, Activity.this.method()
j'obtiens l'erreur suivante:
No enclosing instance of the type Activity is accessible in scope
Une idée ?
android
list
adapter
addressing
user1602687
la source
la source
Réponses:
Oui, vous pouvez.
Dans l'adaptateur, ajoutez un nouveau champ:
Dans le constructeur de l'adaptateur, ajoutez le code suivant:
Dans le getView (...) de l'adaptateur:
remplacez par vos propres noms de classe là où vous voyez votre code, votre activité, etc.
Si vous devez utiliser ce même adaptateur pour plusieurs activités, alors:
Créer une interface
Implémentez cette interface dans les activités dont vous avez besoin pour avoir cette fonctionnalité d'appel de méthode.
Ensuite, dans Adapter getView (), appelez comme:
Vous avez terminé. Si vous devez utiliser cet adaptateur pour des activités qui ne nécessitent pas ce mécanisme d'appel, le code ne s'exécutera pas (si la vérification échoue).
la source
Vous pouvez le faire de cette façon:
Déclarer l'interface:
Laissez votre activité l'imlement:
Puis transmettez votre activité à ListAdater:
Et quelque part dans l'adaptateur, lorsque vous devez appeler cette méthode Activity:
la source
Original:
Je comprends la réponse actuelle mais j'avais besoin d'un exemple plus clair. Voici un exemple de ce que j'ai utilisé avec un
Adapter
(RecyclerView.Adapter) et unActivity
.Dans votre activité:
Cela implémentera le
interface
que nous avons dans notreAdapter
. Dans cet exemple, il sera appelé lorsque l'utilisateur cliquera sur un élément dans leRecyclerView
.Dans votre adaptateur:
Dans le
Activity
, nous avons lancé notreAdapter
et l' avons passé en argument au constructeur. Cela lancerainterface
notre méthode de rappel. Vous pouvez voir que nous utilisons notre méthode de rappel pour les clics des utilisateurs.la source
EventBus
que vous avez suggéré?Basique et simple.
Dans votre adaptateur, utilisez simplement ceci.
((YourParentClass) context).functionToRun();
la source
Une autre façon est:
Écrivez une méthode dans votre adaptateur, disons public void callBack () {}.
Maintenant, lors de la création d'un objet pour l'adaptateur en activité, remplacez cette méthode. La méthode de remplacement sera appelée lorsque vous appelez la méthode dans l'adaptateur.
la source
Pour Kotlin:
Dans votre adaptateur, appelez simplement
la source
cette condition vous permettra d'exécuter quelque chose si l'activité qui a les
GroupView
vues qui demandent de lagetView()
méthode de votreadapter
estyourActivity
REMARQUE:
parent
est-ce que GroupViewla source
getView()
méthode ..... donc nous obtenons le contexte de ce GroupView, et l'examinons à travers la condition ciDans Kotlin, il existe maintenant un moyen plus propre en utilisant des fonctions lambda, pas besoin d'interfaces:
la source