Je veux faire une activité pour sélectionner quel niveau jouer dans une partie. Pour cela, j'ai créé un recyclerview avec des boutons. Chacun de ces boutons devrait commencer son niveau correspondant. Avec le code ci-dessous (extrait de l'adaptateur), ils pointent tous juste à la mainadicule. Y a-t-il un moyen facile de changer cela? Mes excuses Si c'est quelque chose de trop évident, je vous demandais. J'ai commencé à coder il y a quelques jours et je suis toujours dans cette phase où vous ne connaissez même pas les termes de recherche Google appropriés pour vos problèmes. P> P>
3 Réponses :
Vous avez des options différentes pour réaliser cela - idéalement, nous avons notre logique découplée à partir de l'adaptateur et votre activité doit traiter des actions à traiter après que l'utilisateur clique sur l'une des lignes.
aussi loin que moi Peut dire que vous avez défini un député em> qui devrait faire référence à vos points de vue - non? Vous pouvez ajouter un élément cliquez sur l'interface comme si: p> et afin de le déclencher à chaque fois que l'utilisateur clique sur une cellule - au lieu de la définition sur chaque point de vue que vous devriez au lieu de le faire une seule fois sur onecreviewholder em>: p> Ce champ action em> que vous voyez ci-dessus, c'est l'interface envoyée sur Le constructeur de l'adaptateur: p> avec ceci, afin d'appeler une action spécifique, sur votre activité / fragment, il vous suffit de mettre en œuvre l'interface créée - oignoneraction em>: p> EDIT: strong>
Pour faciliter les choses, j'ai créé une fonction d'extension OnClick: p> } p> p>
Merci beaucoup pour votre contribution. J'essaie d'envelopper ma tête autour de certaines choses ici: d'abord, l'espace dans vue.tv_ niveaubutton code> est une faute de frappe, je suppose? Deuxièmement, dans
titulaire.onclick code>, je reçois une "référence non résolue" pour le
onclick code>. Une idée pourquoi? Enfin, partout où vous avez mis
list
arraylist
tableau code> avec
article code> partout, cela devrait fonctionner. Au lieu de cela, je reçois une "référence non résolue" pour chaque occurrence de
élément code>. Je suppose que je dois le déclarer quelque part. Tous les indications sur la façon dont et où?
Oui, c'était une faute de frappe. OnClick est une fonction d'extension que j'ai créée - c'est pourquoi vous avez cette référence non résolue (j'ai modifié mon commentaire précédent avec ces informations). L'article est un objet générique qui a été créé pour vous montrer les données que votre adaptateur doit être le même type que vous définissez votre liste.
Vous devriez obtenir le contexte de la superclasse ( recyclerview.adapter strong> em>). Et utilisez-le pour créer une intention de SetonClickListener strud> em> méthode de votre class YourHolder(view: View) : RecyclerView.ViewHolder(view) {
private var buttonView = view.buttonView
// Variable for the Context
private lateinit var context : Context
fun bindHolder(itemData: ItemData) {
// Init context
context = super.itemView.context
// OnClick Button Handler
buttonView .setOnClickListener{
// Move to AnotherActivity
val intent = Intent(this.context, AnotherActivity::class.java)
intent.putExtra("key", ItemData.value)
startActivity(this.context, intent, null)
}
}
}
La chose la plus facile à faire serait de mettre à jour votre modèle de données pour inclure la classe de l'activité que vous souhaitez lancer. À l'heure actuelle, il semble que vous ayez juste une liste de chaînes. Donc, changez que sur un objet personnalisé qui a une chaîne et la classe que vous souhaitez lancer.
override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = items.get(position) holder.levelButton?.text = item.levelButtonText holder.itemView.levelButton.setOnClickListener{ var gotoLevel= Intent(context, item.activityClass) context.startActivity(gotoLevel) }