0
votes

Comment mettre à jour RECYCLERVIEW dans Android après avoir supprimé l'article à Kotlin?

J'ai créé une vue de recyclage et à l'intérieur qui utilise la vue de carte pour les éléments. J'ai un bouton Supprimer dans une vue de carte chaque fois que je clique sur ce bouton mon article est supprimé de la base de données SQLITE. Mais pour le refléter sur l'interface utilisateur, l'application doit redémarrer. Comment puis-je informer l'ADPATER que l'élément est supprimé?

Activity_Main.xml P>

package com.example.passwordmanager

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.list_item_layout.view.*

class CredentialAdapter(
    private val items: List<CredentialsModel>,
    ctx: Context, val clickListener: (CredentialsModel) -> Unit
): RecyclerView.Adapter<CredentialAdapter.ViewHolder>() {
    var context = ctx
    class ViewHolder(itemView: View):RecyclerView.ViewHolder(itemView){
        fun bind(credential: CredentialsModel,clickListener: (CredentialsModel) -> Unit){
            itemView.urlView.text = credential.url
            itemView.userNameView.text = credential.userName
            itemView.passwordView.text = credential.password
            itemView.noteView.text = credential.note
            itemView.delButton.setOnClickListener{clickListener(credential)}
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.list_item_layout,parent,false))
    }

    override fun getItemCount(): Int {
        return items.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val credential:CredentialsModel = items[position]
        holder.bind(credential,clickListener)
    }
}


0 commentaires

4 Réponses :


1
votes

Ajouter Supprimer SetonClickListener dans votre ONBindviewholder.

override fun onBindViewHolder(holder: ViewHolder, position: Int) {

    holder.remove.setOnClickListener {

        val db = DataBaseHandler(this)
        if(db.deleteData(credential.id)){
            notifyItemRemoved(holder.getAdapterPosition())
        }

    }
}


9 commentaires

J'ai eu une erreur chez tituly.remove, est supprimer un identifiant de bouton de suppression?


Dans votre cas, Delbutton.


ok donc, je dois supprimer SetonClickListner de la fonction de liaison à l'intérieur de la vue Viewholder?


Je ne sais pas pourquoi il montre une erreur pour Removeat . J'essaie d'utiliser goutte , mais puis de l'élément que je suppose fusionner à la fin de la liste.


Je pense que j'utilise la seule liste, je vais essayer avec une liste mutable.


désolé de vous interrompre à nouveau. J'ai eu une erreur à val db = base de donnéesHandlerdler (this) alors j'utilise context au lieu de Ceci mais que l'élément supprimé est supprimé de la base de données mais non reflétant sur l'interface utilisateur.


Après avoir utilisé notifierItemremoved Utiliser notifierItemRangechanged


Quels paramètres doivent être passés?


Changer de paramètre de mutableliste en arraylist fait le travail ..... Merci ... !!!



0
votes

Vous supprimez l'élément de la base de données, mais pas de la liste Inside RecyclERView Adapter.

fun deleteClick(credential: CredentialsModel, position: Int) {
    val db = DataBaseHandler(this)
    if(db.deleteData(credential.id)){
        adapter.remove(position)
        Toast.makeText(applicationContext,"Deleted", Toast.LENGTH_SHORT).show()
    }
}


1 commentaires

Solution de @s T travaille pour moi lorsque je modifie Type de liste de Mutablelist vers ArrayList. Merci de suggérer une liste de formulaires de conversion sur ArrayList




0
votes

Utilisez LISTADPATER

class AdapterMain(var onClickListener: (Int) -> Unit) :
ListAdapter<Note, AdapterMain.NoteViewHolder>(DIFFCALBACK) {


companion object DIFFCALBACK : DiffUtil.ItemCallback<Note>() {
    override fun areItemsTheSame(oldItem: Note, newItem: Note): Boolean {
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(oldItem: Note, newItem: Note): Boolean {
        return oldItem.title == newItem.title &&
                oldItem.description == newItem.description &&
                oldItem.priority == newItem.priority
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.note_item, parent, false)
    return NoteViewHolder(view)
}

override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
    holder.txtTitle.text = getItem(position).title
    holder.txtDesc.text = getItem(position).description
    holder.txtPriority.text = getItem(position).priority.toString()
}


inner class NoteViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var txtTitle: TextView = itemView.txt_title
    var txtDesc: TextView = itemView.txt_desc
    var txtPriority: TextView = itemView.txt_priority

    init {
        itemView.setOnClickListener { onClickListener(adapterPosition) }
    }
}


fun getNoteAt(position: Int): Note {
    return getItem(position)
}


0 commentaires