简体   繁体   中英

Changing the Position of clicked item in RecyclerView on scroll

On click of button when I'm scrolling the view, it changes the position of that clicked button. On every scroll it's showing different position.

  public class ProductAdapter extends
            RecyclerView.Adapter<ProductAdapter.ProductViewHolder> {
     Context ctx;
     ArrayList<ProductDetail> productList;

     public ProductAdapter(Context ctx, ArrayList<ProductDetail> productList) {
        this.ctx = ctx;
        this.productList = productList;
     }

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

     @Override
     public void onBindViewHolder(final ProductViewHolder vHolder, int pos) {

        vHolder.txt_prod_name.setText(productList.get(pos).getProduct_desc());

        vHolder.btn_add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                vHolder.lyt_prod_qty.setVisibility(View.VISIBLE);
                vHolder.btn_add.setVisibility(View.GONE);
            }
        });
     }

     @Override
     public ProductViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {

        View view = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.activity_recycler_search_item, null);
        ProductViewHolder viewHolder = new ProductViewHolder(view);
        return viewHolder;

     }
     public class ProductViewHolder extends RecyclerView.ViewHolder {
        TextView txt_prod_name;
        TextView txt_delivery_type;
        TextView txt_prod_mrp;
        Spinner spn_prod_qty;
        LinearLayout list_lyt, lyt_prod_qty;
        Button btn_add;

        public ProductViewHolder(View itemView) {
            super(itemView);
            txt_prod_name = (TextView) itemView
                    .findViewById(R.id.txt_prod_name);
            txt_delivery_type = (TextView) itemView
                    .findViewById(R.id.txt_delivery_type);
            txt_prod_mrp = (TextView) itemView.findViewById(R.id.txt_prod_mrp);
            btn_add = (Button) itemView.findViewById(R.id.btn_add);
        lyt_prod_qty = (LinearLayout) itemView
                .findViewById(R.id.lyt_prod_qty);
            }
        }
     }

On click of Button when I'mm scrolling the view, it changes the position of that clicked button. On every scroll it's showing different position. Where should I out my click logic or should refresh the adapter every time?

In your ProductDetail modal class add a member boolean isButtonClicked; and add its getter and setter as well. Then make following changes in your onBindViewHolder method:

@Override
public void onBindViewHolder(final ProductViewHolder vHolder, int pos) {

  final ProductDetail productDetail = productList.get(pos);

  vHolder.txt_prod_name.setText(productDetail.getProduct_desc());

  if(productDetail.isButtonClicked()){
  vHolder.lyt_prod_qty.setVisibility(View.VISIBLE);
          vHolder.btn_add.setVisibility(View.GONE);
  } else {
   vHolder.lyt_prod_qty.setVisibility(View.GONE);
          vHolder.btn_add.setVisibility(View.VISIBLE);
  }

  vHolder.btn_add.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
          vHolder.lyt_prod_qty.setVisibility(View.VISIBLE);
          vHolder.btn_add.setVisibility(View.GONE);
          productDetail.setIsButtonClicked(true);
      }
  });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM