0

Ich erhalte Daten vom Server und analysiere sie dann und speichere sie in einer Liste. Ich verwende diese Liste für den RecyclerView-Adapter. Ich benutze Fragmente.notifyDataSetChanged funktioniert nicht beim Adapterwechsel

I erweitert

RecyclerView.Adapter<RecyclerView.ViewHolder> 

dies meine komplette Adapterklasse

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> { 
    private List<ProductModel> list; 
    ItemClickListener itemClickListener; 

    public GridAdapter(List<ProductModel> list, ItemClickListener itemClickListener) { 
     this.list    = list; 
     this.itemClickListener = itemClickListener; 
    } 

    public void update(int position,ProductModel pm){ 
     Log.v("update adapter",position+""); 
     list.set(position,pm); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     final ProductModel cp = list.get(position); 

     holder.tvName.setText(cp.name); 
     holder.tvPrice.setText(cp.price); 
     holder.ratingBar.setRating(cp.rate); 

     Log.v("grid",cp.id + "=="+ cp.checked); 
     if(cp.checked==1){ 
      holder.imgCheck.setVisibility(View.VISIBLE); 
     }else{ 
      holder.imgCheck.setVisibility(View.GONE); 
     } 

     LayerDrawable stars = (LayerDrawable) holder.ratingBar.getProgressDrawable(); 
     stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 

     holder.lnrItem.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       itemClickListener.onItemClick(cp,position); 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     TextView tvName, tvPrice; 
     ImageView imgMenu, imgCheck; 
     LinearLayout lnrItem; 
     RatingBar ratingBar; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      lnrItem = itemView.findViewById(R.id.lnrItem); 
      imgMenu = itemView.findViewById(R.id.imgMenu); 
      imgCheck = itemView.findViewById(R.id.imgCheck); 
      tvName = itemView.findViewById(R.id.tvName); 
      ratingBar = itemView.findViewById(R.id.ratingBar); 
      tvPrice = itemView.findViewById(R.id.tvPrice); 
     } 
    } 
} 

und Fragment-Aktivität verwende ich diesen Code Adapter zu laden

public void fillListProduct(List<ProductModel> mItems) { //method for load adapter for the first time 
     mAdapterGrid = new GridAdapter(mItems,this); 
     recGrid.setAdapter(mAdapterGrid); 
    } 

void update(){ //method to change checked value 
mAdapterGrid.update(cp.row,cp); 
         mAdapterGrid.notifyDataSetChanged(); 
} 

in meinem benutzerdefinierten Adapter recyclerview i haben Sie 3 Variablen können Sie anrufen ID, Name, überprüft, alles funktioniert ordnungsgemäß, in der ersten Ladung ich Set als Standardwert für checked, in meinem Szenario Benutzer kann checked Wert durch Tippen auf die Zeile recycleview ändern.

meine frage ist, wenn benutzer tap wünsch reihe dann überprüft wird von 0 auf 1 ändern und zeigen sie zu recycelview, ich benutze bereits notifydatasetchange() aber nicht funktioniert.

Bitte helfen. dank

Antwort

0

Try mAdapterGrid.notifyDataSetChanged(); und ändern diese Funktion in Ihrem adpater zu entfernen:

public void update(int position,ProductModel pm){ 
     Log.v("update adapter",position+""); 
     list.set(position,pm); 
     notifyItemChanged(position); 
    } 
+0

noch nicht funktioniert – ltvie

+0

Hat u überprüfen, ob die ** ** Liste von ** ** Product aktualisiert oder Nein vor dem Aufruf von notifyItemChanged (position); ? –

Verwandte Themen