Java 通过单击listview中的按钮从自定义listview获取/存储特定数据
我正在尝试制作一个安卓服务员点菜菜单,通过点击菜单中产品的加减按钮,并在点击另一个按钮时显示订单摘要,我就可以接受订单。我创建了一个自定义listivew和arrayadapters。但是我被困在了我应该能够在我的listview中收集listitem内容的部分,我单击了一个add按钮。这是我的密码。我想能够采取的名称,价格和数量的所有项目,我增加了价值Java 通过单击listview中的按钮从自定义listview获取/存储特定数据,java,android,listview,button,onclicklistener,Java,Android,Listview,Button,Onclicklistener,我正在尝试制作一个安卓服务员点菜菜单,通过点击菜单中产品的加减按钮,并在点击另一个按钮时显示订单摘要,我就可以接受订单。我创建了一个自定义listivew和arrayadapters。但是我被困在了我应该能够在我的listview中收集listitem内容的部分,我单击了一个add按钮。这是我的密码。我想能够采取的名称,价格和数量的所有项目,我增加了价值 public class coffee { public String name; public double price;
public class coffee {
public String name;
public double price;
public long itemID;
public int qty;
public int Icon;
public coffee (String name, double price, int qty, int Icon){
this.name = name;
this.price = price;
this.qty = qty;
this.itemID = 0;
this.Icon = Icon;
}
public String getName(){
return name;
}
public double getPrice(){
return price;
}
public int getQty(){
return qty;
}
public long getItemID(){
return itemID;
}
public int getIcon(){
return Icon;
}
public String toString(){
return "ID: " + itemID + "Name: " + name + "Price: " + price + "Quantity: " + qty + "Image: "+ Icon; }}
ArrayAdapter=coffee_adapter.java
public class coffee_adapter extends ArrayAdapter<coffee> {
public static class ViewHolder{
TextView itemName;
TextView itemPrice;
TextView itemQty;
ImageView itemImage;
Button addButton;
Button minusButton;
}
public coffee_adapter(Context context, ArrayList<coffee> cof) {
super(context, 0, cof);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final coffee coffeeList = getItem(position);
final ViewHolder viewHolder;
if(convertView == null ){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_row_layout,parent, false);
viewHolder.itemImage = (ImageView) convertView.findViewById(R.id.itemImage);
viewHolder.itemName = (TextView) convertView.findViewById(R.id.itemName);
viewHolder.itemQty = (TextView) convertView.findViewById(R.id.quantity);
viewHolder.itemPrice = (TextView) convertView.findViewById(R.id.itemPrice);
viewHolder.addButton = (Button) convertView.findViewById(R.id.plusButton);
viewHolder.minusButton = (Button) convertView.findViewById(R.id.minusButton);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.itemName.setText(coffeeList.getName());
viewHolder.itemPrice.setText(String.valueOf(coffeeList.getPrice()));
viewHolder.itemQty.setText(String.valueOf(coffeeList.getQty()));
viewHolder.addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
coffeeList.qty ++;
viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
Toast.makeText(getContext(), "WTF " +coffeeList.qty , Toast.LENGTH_SHORT).show();
}
});
viewHolder.minusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
coffeeList.qty --;
if(coffeeList.qty < 0){
coffeeList.qty = 0;
}
viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
}
});
return convertView;
}
}
公共类coffee_适配器扩展了ArrayAdapter{
公共静态类视图持有者{
TextView项目名称;
文本视图项目价格;
TextView项目数量;
图像查看项目图像;
按钮添加按钮;
按钮和按钮;
}
公共coffee_适配器(上下文,ArrayList cof){
super(上下文,0,cof);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终咖啡列表=获取项目(位置);
最终持票人;
if(convertView==null){
viewHolder=新的viewHolder();
convertView=LayoutInflater.from(getContext()).flate(R.layout.item\u row\u layout,parent,false);
viewHolder.itemImage=(ImageView)convertView.findViewById(R.id.itemImage);
viewHolder.itemName=(TextView)convertView.findViewById(R.id.itemName);
viewHolder.itemQty=(TextView)convertView.findViewById(R.id.quantity);
viewHolder.itemPrice=(TextView)convertView.findViewById(R.id.itemPrice);
viewHolder.addButton=(按钮)convertView.findViewById(R.id.plusButton);
viewHolder.minusButton=(按钮)convertView.findViewById(R.id.minusButton);
convertView.setTag(viewHolder);
}
否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.itemName.setText(coffeeList.getName());
viewHolder.itemPrice.setText(String.valueOf(coffeeList.getPrice());
viewHolder.itemQty.setText(String.valueOf(coffeeList.getQty());
viewHolder.addButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
coffeeList.qty++;
viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
Toast.makeText(getContext(),“WTF”+coffeeList.qty,Toast.LENGTH\u SHORT).show();
}
});
viewHolder.minusButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
coffeeList.qty--;
如果(咖啡列表数量<0){
coffeeList.qty=0;
}
viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
}
});
返回视图;
}
}
列表片段
public class coffee_list extends ListFragment {
private ArrayList<coffee> coffeeList;
private coffee_adapter coffeeAdapter;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
coffeeList = new ArrayList<coffee>();
coffeeList.add(new coffee("Qaldi Black(Americano)",75.00,0,R.drawable.testicon));
coffeeAdapter = new coffee_adapter(getActivity(), coffeeList);
setListAdapter(coffeeAdapter);
getListView().setDivider(ContextCompat.getDrawable(getActivity(), android.R.color.darker_gray));
getListView().setDividerHeight(1);
}
}
public class coffee\u列表扩展了ListFragment{
私人ArrayList咖啡列表;
私人咖啡适配器咖啡适配器;
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
coffeeList=新的ArrayList();
咖啡列表。添加(新咖啡(“Qaldi Black(Americano)”,75.00,0,R.drawable.testicon);
coffeeAdapter=新的咖啡适配器(getActivity(),coffeeList);
setListAdapter(咖啡适配器);
getListView().setDivider(ContextCompat.getDrawable(getActivity(),android.R.color.darker_gray));
getListView().setDividerHeight(1);
}
}
您需要调用notifyDataSetChanged()
查看通过单击按钮所做的更改
比如:
viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
notifyDataSetChanged();
从您的评论中添加,如果您希望重置列表,您可以在列表片段中尝试:
private ArrayList<coffee> baseCoffeeList;
//...initialize baseCoffeeList like you did before in onActivityCreated
public void resetList() {
setListAdapter(new coffee_adapter(getActivity(), baseCoffeeList));
}
您需要调用
notifyDataSetChanged()
查看通过单击按钮所做的更改
比如:
viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
notifyDataSetChanged();
从您的评论中添加,如果您希望重置列表,您可以在列表片段中尝试:
private ArrayList<coffee> baseCoffeeList;
//...initialize baseCoffeeList like you did before in onActivityCreated
public void resetList() {
setListAdapter(new coffee_adapter(getActivity(), baseCoffeeList));
}
先生,我看到thx供您输入。是否有办法将数据重置为原始数据?因为我想在确认订购的物品后重置它。所以我可以接受一个新订单。我还没有尝试你刚才给出的代码,因为我计划在确认/支付订单列表后使用它。这是我目前感到困惑的事情,例如,我为该商品(Qaldi Black Americano)设置了一个数量计数,并希望将该商品的数据(名称、价格、数量,其中数量>0)存储到另一个arraylist(订单列表)中。这样我就可以使用另一个活动来查看所有订购的物品。我目前正在经历尝试和错误,但我希望你能给我一些想法。另外,我正计划在我的应用程序中添加更多的项目和类别。thx对于帮助,你必须更具体,并用一个工作示例问一个单独的问题,这与原始问题脱离主题,对此表示抱歉。我已经提出了一个单独的问题,用我目前使用的代码。。希望你能给我一些你的想法。谢谢。先生,我看到thx供您输入。是否有办法将数据重置为原始数据?因为我想在确认订购的物品后重置它。所以我可以接受一个新订单。我还没有尝试你刚才给出的代码,因为我计划在确认/支付订单列表后使用它。这是我目前感到困惑的事情,例如,我为该商品(Qaldi Black Americano)设置了一个数量计数,并希望将该商品的数据(名称、价格、数量,其中数量>0)存储到另一个arraylist(订单列表)中。这样我就可以使用另一个活动来查看所有订购的物品。我目前正在经历尝试和错误,但我希望你能给我一些想法。附言