0
votes

KOTLIN / Android: Définissez chaque bouton de RecyclERView pour démarrer sa propre activité.

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? XXX

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.


0 commentaires

3 Réponses :


0
votes

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é qui devrait faire référence à vos points de vue - non? Vous pouvez ajouter un élément cliquez sur l'interface comme si: xxx

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 : xxx

Ce champ action que vous voyez ci-dessus, c'est l'interface envoyée sur Le constructeur de l'adaptateur: xxx

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 : xxx

EDIT: Pour faciliter les choses, j'ai créé une fonction d'extension OnClick: xxx

}


2 commentaires

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 est une faute de frappe, je suppose? Deuxièmement, dans titulaire.onclick , je reçois une "référence non résolue" pour le onclick . Une idée pourquoi? Enfin, partout où vous avez mis list , j'ai précédemment porté arraylist . Je pensais donc que si je remplace tableau avec article partout, cela devrait fonctionner. Au lieu de cela, je reçois une "référence non résolue" pour chaque occurrence de élément . 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.



1
votes

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 STRY> EM>

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)
        }
    }
}


0 commentaires

0
votes

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)
}


0 commentaires