J'ai un panier d'achat où j'ajoute des produits, mais j'ai un problème avec ça. Lorsque je repousse le bouton pour supprimer un élément, la vue Recycler n'est pas mise à jour après avoir appelé également notifyDataChanged (). Lorsque je navigue à nouveau à mon panier, l'article n'est pas là car est supprimé. Mais je ne veux pas voir le direclty quand je suis dans mon secteur d'achat. Voici mon adaptateur: et dans mon fragment: p>
3 Réponses :
update strong> p> garder ce que je vous ai dit et faire sûr que la liste En d'autres termes: P> Je ne suis pas sûr si notifydatastetchanged code> ici dans la boucle de vue: code> que vous appelez sur la méthode .remove (indextoremove) code> est la liste réelle que vous avez transmise à votre adaptateur pour remplir des données, ce qui signifie que la liste que vous avez utilisée dans getItemCount () code> p> artikullobject code> est la liste que vous devez supprimer l'objet De, vous devez utiliser la liste principale que vous avez utilisée pour remplir l'adaptateur. p> p>
Créer un ISHOPPINGCART CODE> FORT> Interface qui sera implémenté par votre fragment code> strong>. Nous voulons conserver la logique dans le fragment code> strong>. (Personnellement, je déplacerais cette logique à la vue ViewModel Code> Strong> mais cela se passera sur une tangente.) IshoppingCart h3>
fun DeleteItemToCart(itemId: String) {
dataset.removeItemWithItemId(itemId)
notifyDataSetChanged()
}
Vous pouvez supprimer un élément de l'adaptateur dans une vue de la vue modifie de sorte que votre code: p> Le onclick () CODE> auditeur d'une certaine ligne de l'écran Recyclerview à l'aide de getAdapterposition () code> qui retourne la position de la ligne cliquée; Donc, vous ajouteriez:
gettadapterposition () code> est un Méthode de visualisation code> à l'aide de la classe Adapter, de sorte que vous pouvez simplement transférer la vue . OnLongClickListener Code> Pour être dans la liste de visée sur mesure code> au lieu de la personnalisation recyclerview.adapter code> Adaptateur. P> class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
View removeProduct;
MyViewHolder(@NonNull View listItem) {
super(listItem);
// caching views
removeProduct = listItem.findViewById(...);
// Listen to removing a product
removeProduct.setOnClickListener(v -> {
SharedPreferences preferences = mContext.getSharedPreferences(ITEMS_PREF, Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor = preferences.edit();
Gson gson = new Gson();
String json = preferences.getString("artikujtShporta", "");
ArrayList<Artikujt> artikullObject = gson
.fromJson(json, new TypeToken<ArrayList<Artikujt>>(){}.getType());
// remove current row of the clicked item
artikullObject.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
});
}
}
getAdapterposition () n'est pas trouvé comme une méthode
@Eralddeveloper ma faute; S'il vous plaît vérifier la réponse mise à jour, j'ai supposé des trucs comme "MyViewModel" car il n'est pas fourni dans la question.
@Eralddeveloper Pouvez-vous fournir le code de votre adaptateur et de votre visual