0

wenn ich meine recycleview mit notifyDataSetChange() benachrichtigen wird automatisch nach oben scrollen.Prevent Recycleview scrollen, wenn notifyDataSetChange()

Ich mache diesen Adapter für mehrere Zwecke.

die App ist nur für Tablet.

so kann mir bitte bitte die Lösung dafür geben. ??

Hier ist mein recycleview Adapter.

public class PickersListAdapter extends RecyclerView.Adapter<PickersListAdapter.DataObjectHolder> 
{ 

    private Context context; 
    private ArrayList<PickersModel> pickersModelArrayList; 
    private ItemsListFragment fragment; 

    public PickersListAdapter(Context context, ArrayList<PickersModel> pickersModelArrayList, ItemsListFragment itemsListFragment) 
    { 
     this.context = context; 
     this.pickersModelArrayList = pickersModelArrayList; 
     fragment = itemsListFragment; 
    } 

    @Override 
    public PickersListAdapter.DataObjectHolder onCreateViewHolder(ViewGroup parent, final int viewType) 
    { 
     View view = LayoutInflater.from(context).inflate(R.layout.inflate_list_pickers, parent, false); 
     DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 

     return dataObjectHolder; 
    } 

    @Override 
    public void onBindViewHolder(final PickersListAdapter.DataObjectHolder holder, final int position) 
    { 
     holder.myBackground.setSelected(pickersModelArrayList.get(position).isClicked()); 
     holder.checkBox.setChecked(pickersModelArrayList.get(position).isChecked()); 
     holder.txtItemName.setText(pickersModelArrayList.get(position).getItemName()); 
     holder.txtitemQuantity.setText(pickersModelArrayList.get(position).getQuantity()); 
     Log.e("image url...", pickersModelArrayList.get(position).getItemIcon()); 
     Glide.with(context).load(pickersModelArrayList.get(position).getItemIcon()).placeholder(R.drawable.ic_item_icon).into(holder.imageView); 

     holder.myBackground.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 

       for (int i = 0; i < pickersModelArrayList.size(); i++) 
       { 
        pickersModelArrayList.get(i).setClicked(pickersModelArrayList.get(position).getItemName().equals(pickersModelArrayList.get(i).getItemName())); 
       } 
       notifyDataSetChanged(); 
      } 
     }); 

    } 

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

    public class DataObjectHolder extends RecyclerView.ViewHolder 
    { 
     private CheckBox checkBox; 
     private ImageView imageView; 
     private TextView txtItemName, txtitemQuantity; 
     private LinearLayout myBackground; 

     public DataObjectHolder(View itemView) 
     { 
      super(itemView); 
      myBackground = (LinearLayout) itemView.findViewById(R.id.myBackground); 
      checkBox = (CheckBox) itemView.findViewById(R.id.checkBoxPickersItems); 
      imageView = (ImageView) itemView.findViewById(R.id.imgItemIconPickerItems); 
      txtItemName = (TextView) itemView.findViewById(R.id.txtItemNamePickerItems); 
      txtitemQuantity = (TextView) itemView.findViewById(R.id.txtItemQuantityPickerItems); 

     } 
    } 
} 

Antwort

0

Verwenden setTag(), getTag() und dann mit unterschiedlichen Funktionen zu informieren.

so etwas wie dieses Versuchen:

holder.myBackground.setTag(position); 
     holder.myBackground.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       if (null != v.getTag()) { 
        int position = (int) v.getTag(); 
        for (int i = 0; i < pickersModelArrayList.size(); i++) { 
         pickersModelArrayList.get(i).setClicked(pickersModelArrayList.get(position).getItemName().equals(pickersModelArrayList.get(i).getItemName())); 
        } 
        notifyItemChanged(position); 
       } 
      } 
     }); 
+0

'setTag'? wozu? Implementiere nur 'OnClickListener' in deinem' ViewHolder', das ist alles – pskink

+0

'setTag()' ist erforderlich, da es in der Liste die Position der Ansicht haben soll, auf die du geklickt hast. Daher sollten sich nur die Änderungen für diese Position widerspiegeln, nicht für jeden Artikel. –

+0

alles was Sie brauchen, ist 'OnClickListener' in Ihrem' ViewHolder' zu implementieren, keine Notwendigkeit für 'setTag' /' getTag', siehe 'ViewHolder' Dokumentation für weitere Informationen – pskink

Verwandte Themen