J'ai une liste d'articles qui sont placées sous un recyclerview. Sur n'importe quel article, une quantité (ajout ou soustraire). Lorsque Ajouter est sélectionné, la quantité doit augmenter une.
mais quand j'ai cliqué sur '+' pour la première fois, la valeur de la quantité est réglé sur 1 et peu après la réinitialisation à 0, mais lorsque je clique sur la deuxième fois que la valeur est devenue «1». De même lorsque je clique sur la prochaine fois que la valeur est définie sur 2 et après une fraction de seconde, il est toujours possible de passer à 1 et je clique sur une autre fois que la valeur est en train de devenir 2. Pourquoi par clic n'est pas reconnu? Quelqu'un peut-il m'aider s'il vous plaît ici? P>
public class ItemListAdapter extends RecyclerView.Adapter<ItemListAdapter.ItemViewHolder>{
private Context mContext;
private List<Items> itemsList;
private OnItemListListner onClick;
public ItemListAdapter(Context mContext,List<Items> itemsList)
{
this.mContext=mContext;
this.itemsList=itemsList;
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater=LayoutInflater.from(mContext);
View view=inflater.inflate(R.layout.item_details_layout,null);
return new ItemListAdapter.ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ItemViewHolder holder, final int position) {
Items items=itemsList.get(position);
Log.d("onBindViewHolder",items.getItemName());
holder.itemNameTV.setText(items.getItemName());
String strItemPrice=mContext.getResources().getString(R.string.Rs)+" "+String.valueOf(items.getItemPrice());
holder.itemPriceTV.setText(strItemPrice);
holder.itemDescTV.setText(items.getItemDescription());
Glide.with(mContext).load(items.getItemImagePath()).into(holder.imageView);
holder.itemAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int intCurrentQuantity=Integer.valueOf(holder.itemQuantity.getText().toString());
intCurrentQuantity+=1;
Log.d("myQuantity",String.valueOf(intCurrentQuantity));
holder.itemQuantity.setText(String.valueOf(intCurrentQuantity));
notifyItemChanged(holder.getAdapterPosition());
}
});
holder.itemNameTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClick.onItemListClick(position);
}
});
holder.itemPriceTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClick.onItemListClick(position);
}
});
holder.itemDescTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClick.onItemListClick(position);
}
});
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClick.onItemListClick(position);
}
});
}
@Override
public int getItemCount() {
return itemsList.size();
}
public void SetOnClick(OnItemListListner onClick)
{
this.onClick=onClick;
}
class ItemViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView itemNameTV,itemPriceTV,itemDescTV,itemQuantity,itemSubtract,itemAdd;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
imageView=itemView.findViewById(R.id.itemImageView);
itemNameTV=itemView.findViewById(R.id.itemNameTextView);
itemPriceTV=itemView.findViewById(R.id.itemPriceTextView);
itemDescTV=itemView.findViewById(R.id.itemDescritionTextView);
itemQuantity=itemView.findViewById(R.id.itemQuantity);
itemSubtract=itemView.findViewById(R.id.subtractQuantity);
itemAdd=itemView.findViewById(R.id.addQuantity);
}
}
public interface OnItemListListner{
void onItemListClick(int position);
}
}
4 Réponses :
Vérifiez le code mis à jour
holder.itemAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int intCurrentQuantity=Integer.valueOf(holder.itemQuantity.getText().toString());
++intCurrentQuantity; //use this
Log.d("myQuantity",String.valueOf(intCurrentQuantity));
holder.itemQuantity.setText(String.valueOf(intCurrentQuantity));
notifyItemChanged(holder.getAdapterPosition());
}
});
La valeur n'est pas mise à jour. Logiquement aussi ce qui précède peut ne pas fonctionner. Pouvez-vous s'il vous plaît expliquer ce que cela changera si préfixe l'incrément que ce que j'ai utilisé?
La vue Recycler recycle les vues sur défilement et réinitialise son contenu. Vous devez donc persister la quantité puis obtenir et régler à partir de l'objet Model ou Hashmap. P> Qté code> variable. Vous pouvez le faire de deux manières p>
hashmap code> comme item.getid () code> comme clé et Qté code> comme valeur. LI>
ol>
La deuxième approche m'a aidé. Merci d'avoir des idées.
Fondamentalement, le pire un: D
Reviewd Votre code puis après que je vienne d'accord avec la réponse de Harsh Il y a un moyen de définir votre adaptateur. Modèle le plus couramment utilisé pour stocker et retirer les données.
Vous devez créer une classe de modèle unique et définir des données d'abord dans le modèle, puis après avoir reçu des données du modèle et définissez dans votre adaptateur / notify votre adaptateur. P> < P> Vous devez créer une variable dans la classe modèle comme ci-dessous Snippet: P> réponse utile: cliquez sur moi p> p>
Cette réponse aiderait également, mais cela peut également être juste fait avec HASHMAP que de créer une classe distincte aussi loin que mon besoin en ce moment.
Vous devez avoir la propriété Quantité dans la classe de modèle d'élément et devoir suivre le code que j'ai ajouté ci-dessous. Thank.Je suis sûr que cela fonctionnera pour vous. P> < / p>
Merci d'avoir répondu. Ouais, à ce moment-là, je ne prévois pas de sauvegarder la quantité dans le modèle d'élément, car tout utilisateur de point sera affiché avec 0 quantité et + et - symboles pour tous les éléments. Lorsque vous avez cliqué sur ces symboles, nous devons mettre à jour la quantité. Donc, comme le dit dur ci-dessus, j'ai suivi HASHMAP pour stocker la position et la quantité actuelle. Lorsque l'utilisateur ajoute ou soustrait, les quantités sont mises à jour à partir du hashmap.
OK Pas de problème à votre logique, vous pouvez également filtrer pour montrer ou non à montrer la quantité mais qui dépend de votre logique.
Est-ce que cela répond à votre question? Android - Impossible d'incrémenter ou de décrémenter la valeur de la liste Item < / a>