Android 在滚动的RecyclerView中更改已单击项目的位置

Android 在滚动的RecyclerView中更改已单击项目的位置,android,adapter,android-recyclerview,Android,Adapter,Android Recyclerview,当我滚动视图时,单击按钮,它会更改 单击按钮的位置。在每一个卷轴上都显示出不同的内容 位置 public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder> { Context ctx; ArrayList<ProductDetail> productList; public ProductAdap

当我滚动视图时,单击按钮,它会更改 单击按钮的位置。在每一个卷轴上都显示出不同的内容 位置

  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);
            }
        }
     }
公共类ProductAdapter扩展
RecyclerView.适配器{
上下文ctx;
ArrayList产品列表;
公共产品适配器(上下文ctx、ArrayList productList){
this.ctx=ctx;
this.productList=productList;
}
@凌驾
public int getItemCount(){
返回productList.size();
}
@凌驾
BindViewHolder上的公共无效(最终产品ViewHolder vHolder,int pos){
vHolder.txt_prod_name.setText(productList.get(pos.getProduct_desc());
vHolder.btn_add.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
vHolder.lyt\u产品数量设置可见性(View.VISIBLE);
vHolder.btn_add.setVisibility(View.GONE);
}
});
}
@凌驾
公共产品ViewHolder onCreateViewHolder(视图组父级,int arg1){
View=LayoutInflater.from(parent.getContext()).flate(
R.layout.activity\u recycler\u search\u item,空);
ProductViewHolder viewHolder=新的ProductViewHolder(视图);
返回视图持有者;
}
公共类ProductViewHolder扩展了RecyclerView.ViewHolder{
TextView txt_产品名称;
TextView txt_交付类型;
TextView txt_prod_mrp;
微调器spn\U产品数量;
线性布局清单、生产数量;
按钮btn_添加;
公共产品视图持有者(视图项视图){
超级(项目视图);
txt\U prod\U name=(文本视图)项目视图
.findViewById(R.id.txt\u产品名称);
txt_交付_类型=(文本视图)项目视图
.findViewById(R.id.txt\u交付类型);
txt_prod_mrp=(TextView)itemView.findviewbyd(R.id.txt_prod_mrp);
btn_add=(按钮)itemviewbyd(R.id.btn_add);
lyt\U产品数量=(线性布局)项目视图
.findViewById(R.id.lyt\U产品数量);
}
}
}
当我滚动视图时,点击
按钮
,它会改变点击按钮的位置。在每一个卷轴上都显示出不同的内容
位置。我应该在哪里输出单击逻辑,或者每次都应该刷新适配器?

在您的
ProductDetail
modal类中添加一个成员
boolean isButtonClicked
并添加其getter和setter。然后在
onBindViewHolder
方法中进行以下更改:

@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);
      }
  });
}