【问题标题】:Changing the Position of clicked item in RecyclerView on scroll在滚动时更改 RecyclerView 中单击项目的位置
【发布时间】:2015-07-29 11:27:07
【问题描述】:

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

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

当我滚动视图时点击Button,它会改变点击按钮的位置。在每一个卷轴上它都显示出不同的 位置。我应该在哪里输出我的点击逻辑或者每次都应该刷新适配器?

【问题讨论】:

    标签: android adapter android-recyclerview


    【解决方案1】:

    在你的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);
          }
      });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多