Java 通过单击listview中的按钮从自定义listview获取/存储特定数据

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;

我正在尝试制作一个安卓服务员点菜菜单,通过点击菜单中产品的加减按钮,并在点击另一个按钮时显示订单摘要,我就可以接受订单。我创建了一个自定义listivew和arrayadapters。但是我被困在了我应该能够在我的listview中收集listitem内容的部分,我单击了一个add按钮。这是我的密码。我想能够采取的名称,价格和数量的所有项目,我增加了价值

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(订单列表)中。这样我就可以使用另一个活动来查看所有订购的物品。我目前正在经历尝试和错误,但我希望你能给我一些想法。附言