迭代项目数量,自定义适配器
Posted
技术标签:
【中文标题】迭代项目数量,自定义适配器【英文标题】:Iterate quantity for items , custom adapter 【发布时间】:2020-05-27 01:32:54 【问题描述】:我有一个列表视图,其中每个项目都有一个 TextView 和 2 个按钮( + 和 - )。当我按下 + 按钮时,我想从 TextView 迭代数量。在此之后,我需要总结列表中每个项目的所有项目(价格 * 项目数量)并将结果放入新的 TextView(总成本)。那是我的适配器和主要活动。感谢您的帮助。
public class cartItemsAdapter extends BaseAdapter
private ArrayList<items> itemsList;
private Context context;
public cartItemsAdapter(ArrayList<items> list,Context cont)
this.itemsList = list;
this.context=cont;
@Override
public int getCount()
return this.itemsList.size();
@Override
public Object getItem(int position)
return this.itemsList.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
ViewHolder holder = null;
if(convertView==null)
LayoutInflater inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.list_cart_item_view,null);
holder = new ViewHolder();
holder.imageView = (ImageView)convertView.findViewById(R.id.icon_item);
holder.nameView = (TextView) convertView.findViewById(R.id.name_item);
holder.priceView=(TextView)convertView.findViewById(R.id.price_item);
holder.plusButton = (Button) convertView.findViewById(R.id.cart_plus_button);
holder.minusButton = (Button) convertView.findViewById(R.id.cart_minus_button);
holder.removeButton = (Button) convertView.findViewById(R.id.cart_remove_button);
holder.quantityView = (TextView) convertView.findViewById(R.id.cart_quantity_view);
convertView.setTag(holder);
else
holder=(ViewHolder)convertView.getTag();
items itm = itemsList.get(position);
holder.imageView.setImageResource(itm.getlImageId());
holder.nameView.setText(itm.getlName());
holder.priceView.setText(itm.getlPrice() + " $");
holder.quantityView.setText("1");
/*holder.plusButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int pquant=Integer.valueOf(quant.toString());
pquant++;
);
holder.minusButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int mquant=Integer.valueOf(quant.toString());
mquant--;
);*/
return convertView;
private static class ViewHolder
public ImageView imageView;
public TextView nameView;
public TextView priceView;
public Button plusButton;
public Button minusButton;
public Button removeButton;
public TextView quantityView;
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.cart);
plusBtn = findViewById(R.id.cart_plus_button);
minusBtn = findViewById(R.id.cart_minus_button);
removeBtn = findViewById(R.id.cart_remove_button);
quantity = findViewById(R.id.cart_quantity_view);
listView = (ListView) findViewById(R.id.cart_category_listview);
favoriteDbHelper = new DatabaseHelper(this);
item = favoriteDbHelper.getAllDataCart();
myAdapter = new cartItemsAdapter(item, this);
listView.setAdapter(myAdapter);
【问题讨论】:
【参考方案1】:其实你的这段代码很接近:
holder.plusButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int pquant=Integer.valueOf(quant.toString());
pquant++;
);
holder.minusButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int mquant=Integer.valueOf(quant.toString());
mquant--;
);
您需要做的就是访问onClick(View v)
内的itemsList
。为了简单起见,试试这个:
holder.plusButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int position = getAdapterPosition();
Items item = itemsList.get(position);
//now you can get your quant by accessing this item object
);
关键是使用getAdapterPosition()
获取当前位置。
【讨论】:
我试试你说的,但我失败了,你能告诉我我需要做什么才能访问和修改吗? 假设int quant
存在于您的Items
类中,您可以使用item.setQuant(item.getQuant() + 1);
访问它。或者,也许您可以提供更多关于您将这个 quant
整数存储在哪里的信息?以上是关于迭代项目数量,自定义适配器的主要内容,如果未能解决你的问题,请参考以下文章