java - 通过单击 ListView 内的按钮从自定义 ListView 获取/存储特定数据

标签 java android listview button onclicklistener

我正在尝试制作一个 Android 服务员点菜菜单,其中我可以通过单击菜单中产品中的添加/减按钮来接受订单,并在单击另一个按钮时显示订单摘要。我创建了一个自定义 listivew 和 arrayadapters。但我陷入了我应该能够在我单击添加按钮的 ListView 中收集列表项的内容的部分。这是我的代码。我希望能够获取我增值的所有商品的名称价格和数量。

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;
    }
}

列表 fragment

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);
    }
}

最佳答案

您需要调用 notifyDataSetChanged()以查看您通过单击按钮所做的更改。

所以类似:

viewHolder.itemQty.setText(String.valueOf(coffeeList.qty));
notifyDataSetChanged();

根据您的评论添加,如果您想重置列表,您可以在列表 fragment 中尝试:

private ArrayList<coffee> baseCoffeeList;
//...initialize baseCoffeeList like you did before in onActivityCreated

public void resetList() {
    setListAdapter(new coffee_adapter(getActivity(), baseCoffeeList));
}

或者(这个我没有尝试过):

coffee_adapter.java :

public class coffee_adapter extends ArrayAdapter<coffee> {
    private ArrayList<coffee> coffeeList;
    public coffee_adapter(Context context, ArrayList<coffee> cof) {
        super(context, 0, cof);
        this.coffeeList = cof;
    }
    public reset(ArrayList<coffee> baseCoffeeList){
        coffeeList.clear();
        coffeeList.addAll(baseCoffeeList);
        notifyDataSetChanged();
    }
}

关于java - 通过单击 ListView 内的按钮从自定义 ListView 获取/存储特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702631/

相关文章:

java - 如何通过按按钮重置 MDC 微调器(AutoCompleteTextview/ExposedDropdownMenu)中的选定项目

android - 如何将多个项目放在 ListView 的同一行?

Android LazyList ListView 的初始加载在滚动之前不显示图像

java - 'az account list' 的 API 等效项是什么?

java - JGraphX - 如何实时预览和应用更复杂的图形更改

Android AccountManager、Oauth、getAccessToken() 除了询问密码外什么都不做

android listview下拉创建新行

Android - 我的简单 ListView/Toast 应用程序在启动时崩溃......有什么想法吗?

java - 从两个或多个组中检索前 N 个对象

java - 如何使用 POI 测试单元格是否符合 ConditionalFormattingRule 中定义的规则?