Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在同一onclick方法中使用notifyDataSetChanged和settText_Android_Android Recyclerview - Fatal编程技术网

Android 如何在同一onclick方法中使用notifyDataSetChanged和settText

Android 如何在同一onclick方法中使用notifyDataSetChanged和settText,android,android-recyclerview,Android,Android Recyclerview,我需要使用notifyDataSetChanged()和setText在onBindViewHolder中为文本视图设置一个值。我试着使用两种方法,一种是内部onClick方法 qtyIncrease.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { quantityText.setText("Good"); toatlPric

我需要使用
notifyDataSetChanged()
setText
onBindViewHolder
中为文本视图设置一个值。我试着使用两种方法,一种是内部
onClick
方法

qtyIncrease.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            quantityText.setText("Good");
            toatlPriceText.setText("250");
            notifyDataSetChanged();
        }
    });
我的适配器类

public class CartCardviewAdapter extends RecyclerView.Adapter<CartCardviewAdapter.MyViewHolder> {

private Context context;
private ArrayList<CartCardviewModel> dataSet;
private ShoppingCart shoppingCart;

public static class MyViewHolder extends RecyclerView.ViewHolder {

    TextView itemNameText, itemTypeText, itemDescText, unitPriceText, toatlPriceText, quantityText;
    ImageView itemImage, removeIcon, qtyIncrease, qtyDecrease;

    public MyViewHolder(final View itemView) {
        super(itemView);

        this.itemNameText = (TextView) itemView.findViewById(R.id.item_name_text);
        this.itemTypeText = (TextView) itemView.findViewById(R.id.item_type_text);
        this.itemDescText = (TextView) itemView.findViewById(R.id.item_desc_text);
        this.unitPriceText = (TextView) itemView.findViewById(R.id.item_unit_price_text);
        this.toatlPriceText = (TextView) itemView.findViewById(R.id.item_total_price_text);
        this.quantityText = (TextView) itemView.findViewById(R.id.item_quantity_text);

        this.itemImage = (ImageView) itemView.findViewById(R.id.item_image);
        this.removeIcon = (ImageView) itemView.findViewById(R.id.item_remove_icon);
        this.qtyIncrease = (ImageView) itemView.findViewById(R.id.cart_quantity_increase);
        this.qtyDecrease = (ImageView) itemView.findViewById(R.id.cart_quantity_decrease);
    }
}

public CartCardviewAdapter(ArrayList<CartCardviewModel> data) {
    this.dataSet = data;
}

@Override
public CartCardviewAdapter.MyViewHolder onCreateViewHolder(final ViewGroup parent,
                                                           int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.cart_cardview_layout, parent, false);

    CartCardviewAdapter.MyViewHolder myViewHolder = new CartCardviewAdapter.MyViewHolder(view);

    context = parent.getContext();
    return myViewHolder;
}

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onBindViewHolder(final CartCardviewAdapter.MyViewHolder holder, final int listPosition) {

    shoppingCart = MainActivity.getCartInstance().getCart();

    TextView itemNameText = holder.itemNameText;
    TextView itemTypeText = holder.itemTypeText;
    TextView itemDescText = holder.itemDescText;
    TextView unitPriceText = holder.unitPriceText;
    final TextView toatlPriceText = holder.toatlPriceText;
    final TextView quantityText = holder.quantityText;

    ImageView itemImage = holder.itemImage;
    ImageView removeIcon = holder.removeIcon;
    ImageView qtyIncrease = holder.qtyIncrease;
    ImageView qtyDecrease = holder.qtyDecrease;

    itemNameText.setText(dataSet.get(listPosition).getItemName());
    itemTypeText.setText(dataSet.get(listPosition).getItemType());
    itemDescText.setText(dataSet.get(listPosition).getItemDescription());
    unitPriceText.setText(String.valueOf(dataSet.get(listPosition).getUnitPrice()));
    toatlPriceText.setText(String.valueOf(dataSet.get(listPosition).getTotalPrice()));

    String qty;
    if (dataSet.get(listPosition).getItemQuantity() < 9) {
        qty = "0" + String.valueOf(dataSet.get(listPosition).getItemQuantity());
    } else {
        qty = String.valueOf(dataSet.get(listPosition).getItemQuantity());
    }
    quantityText.setText(qty);

    Picasso.with(context).load(dataSet.get(listPosition).getItemImageUrl()).into(itemImage);

    removeIcon.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(v.getContext(), String.valueOf(listPosition), Toast.LENGTH_SHORT).show();
            shoppingCart.removeItem(listPosition);
            dataSet.remove(listPosition);
            notifyDataSetChanged();
        }
    });

    qtyIncrease.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            shoppingCart.increaseItemQuantity(listPosition);
            quantityText.setText(String.valueOf(shoppingCart.getItemQuantity(listPosition)));
            toatlPriceText.setText(String.valueOf(shoppingCart.getTotalPrice(listPosition)));
            notifyDataSetChanged();
        }
    });

    qtyDecrease.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (shoppingCart.getItemQuantity(listPosition) == 1) {
                Toast.makeText(v.getContext(), "Already Minimum Quantity is Reached", Toast.LENGTH_SHORT).show();
            } else {
                shoppingCart.decreaseItemQuantity(listPosition);
                quantityText.setText(String.valueOf(shoppingCart.getItemQuantity(listPosition)));
                toatlPriceText.setText(String.valueOf(shoppingCart.getTotalPrice(listPosition)));
                notifyDataSetChanged();
            }
        }
    });

}

@Override
public int getItemCount() {
    return dataSet.size();
}
}
公共类CartCardviewAdapter扩展了RecyclerView.Adapter{ 私人语境; 私有ArrayList数据集; 私人购物车; 公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{ TextView itemNameText、itemTypeText、itemDescText、unitPriceText、ToAtalPriceText、quantityText; ImageView项目图像、移除图标、qtyIncrease、QTYDerease; 公共MyViewHolder(最终视图项视图){ 超级(项目视图); this.itemNameText=(TextView)itemView.findViewById(R.id.item\u name\u text); this.itemTypeText=(TextView)itemView.findViewById(R.id.item\u type\u text); this.itemDescText=(TextView)itemView.findViewById(R.id.item\u desc\u text); this.unitPriceText=(TextView)itemView.findViewById(R.id.item\u unit\u price\u text); this.toatlPriceText=(TextView)itemView.findViewById(R.id.item\u total\u price\u text); this.quantityText=(TextView)itemView.findViewById(R.id.item\u quantity\u text); this.itemImage=(ImageView)itemView.findViewById(R.id.item\u image); this.removicon=(ImageView)itemView.findViewById(R.id.item\u remove\u图标); this.qtyIncrease=(ImageView)itemView.findViewById(R.id.cart\u quantity\u increase); this.qtyDecrease=(ImageView)itemView.findViewById(R.id.cart\数量\减少); } } 公共CartCardviewAdapter(ArrayList数据){ this.dataSet=数据; } @凌驾 公共CartCardviewAdapter.MyViewHolder onCreateViewHolder(最终视图组父级, int视图类型){ View=LayoutInflater.from(parent.getContext()) .充气(R.layout.cart\u cardview\u布局,父级,错误); CartCardviewAdapter.MyViewHolder MyViewHolder=新的CartCardviewAdapter.MyViewHolder(视图); context=parent.getContext(); 返回myViewHolder; } @RequiresApi(api=Build.VERSION\u code.N) @凌驾 公共无效onBindViewHolder(最终CartCardviewAdapter.MyViewHolder,最终int列表位置){ shoppingCart=MainActivity.getCartInstance().getCart(); TextView itemNameText=holder.itemNameText; TextView itemTypeText=holder.itemTypeText; TextView itemDescText=holder.itemDescText; TextView unitPriceText=holder.unitPriceText; 最终文本视图toatlPriceText=holder.toatlPriceText; 最终文本视图quantityText=holder.quantityText; ImageView itemImage=holder.itemImage; ImageView removeIcon=holder.removeIcon; ImageView qtyIncrease=holder.qtyIncrease; ImageView QTYDERIZE=holder.QTYDERIZE; itemNameText.setText(dataSet.get(listPosition.getItemName()); itemTypeText.setText(dataSet.get(listPosition.getItemType()); itemDescText.setText(dataSet.get(listPosition.getItemDescription()); unitPriceText.setText(String.valueOf(dataSet.get(listPosition.getUnitPrice())); toatlPriceText.setText(String.valueOf(dataSet.get(listPosition.getTotalPrice()); 字符串数量; if(dataSet.get(listPosition).getItemQuantity()<9){ qty=“0”+String.valueOf(dataSet.get(listPosition.getItemQuantity()); }否则{ qty=String.valueOf(dataSet.get(listPosition.getItemQuantity()); } quantityText.setText(数量); Picasso.with(context).load(dataSet.get(listPosition.getItemImageUrl())到(itemImage)中; removecon.setOnClickListener(新视图.OnClickListener(){ 公共void onClick(视图v){ Toast.makeText(v.getContext(),String.valueOf(listPosition),Toast.LENGTH_SHORT.show(); shoppingCart.removeItem(列表位置); 删除(listPosition); notifyDataSetChanged(); } }); qtyIncrease.setOnClickListener(新视图.OnClickListener(){ 公共void onClick(视图v){ shoppingCart.increaseItemQuantity(listPosition); quantityText.setText(String.valueOf(shoppingCart.getItemQuantity(listPosition)); toatlPriceText.setText(String.valueOf(shoppingCart.getTotalPrice(listPosition)); notifyDataSetChanged(); } }); qtyDecrease.setOnClickListener(新视图.OnClickListener(){ 公共void onClick(视图v){ if(shoppingCart.getItemQuantity(listPosition)==1){ Toast.makeText(v.getContext(),“已达到最小数量”,Toast.LENGTH_SHORT.show(); }否则{ shoppingCart.decreaseItemQuantity(列表位置); quantityText.setText(String.valueOf(shoppingCart.getItemQuantity(listPosition)); toatlPriceText.setText(String.valueOf(shoppingCart.getTotalPrice(listPosition)); notifyDataSetChanged(); } } }); } @凌驾 public int getItemCount(){ 返回dataSet.size(); } }
但这两种方法都不能一蹴而就。我需要回去看看受影响的变化。我无法理解这个问题。请帮助我

点击不会从那里触发,您需要将图像视图的点击监听器“qtyIncrease”设置在ViewHolder中而不是“OnBindViewHolder”中


首先,这一行
@RequiresApi(api=Build.VERSION\u CODES.N)
的限制性太强,请考虑下面这一行的较低级别。有很多方法可以解决这个问题,首先可以使用
RecyclerView.OnItemTouchListener
到托管适配器的回收器。下面是一个详细的教程,介绍了单次和长时间单击。另一种方法是界面分离原则

  • 在适配器类中,使用一个方法创建一个接口
  • 方法签名(视图,int位置)描述了在适配器中用重复位置单击的视图
  • 申报
      public static class MyViewHolder extends RecyclerView.ViewHolder {
    
        TextView itemNameText, itemTypeText, itemDescText, unitPriceText, toatlPriceText, quantityText;
        ImageView itemImage, removeIcon, qtyIncrease, qtyDecrease;
    
        public MyViewHolder(final View itemView) {
            super(itemView);
    
            this.itemNameText = (TextView) itemView.findViewById(R.id.item_name_text);
            this.itemTypeText = (TextView) itemView.findViewById(R.id.item_type_text);
            this.itemDescText = (TextView) itemView.findViewById(R.id.item_desc_text);
            this.unitPriceText = (TextView) itemView.findViewById(R.id.item_unit_price_text);
            this.toatlPriceText = (TextView) itemView.findViewById(R.id.item_total_price_text);
            this.quantityText = (TextView) itemView.findViewById(R.id.item_quantity_text);
    
            this.itemImage = (ImageView) itemView.findViewById(R.id.item_image);
            this.removeIcon = (ImageView) itemView.findViewById(R.id.item_remove_icon);
            this.qtyIncrease = (ImageView) itemView.findViewById(R.id.cart_quantity_increase);
            this.qtyDecrease = (ImageView) itemView.findViewById(R.id.cart_quantity_decrease);
    
    
            qtyIncrease.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                quantityText.setText("Good");
                toatlPriceText.setText("250");
                notifyDataSetChanged();
            }
        });
    
    }