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
到托管适配器的回收器。下面是一个详细的教程,介绍了单次和长时间单击。另一种方法是界面分离原则
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();
}
});
}