簡體   English   中英

如何使2個按鈕用於多個listview元素

[英]How to make 2 buttons for multiple listview elements

我正在創建一個用於訂購食物的應用程序,並且創建了一個Dish類和一個Dish陣列適配器。 當前,您可以通過單擊視圖來添加特定菜餚的數量。

但是,我希望有2個按鈕可以添加或減少數量。

如何為每個菜式制作2個按鈕,而無需為每個元素編寫其欠款按鈕代碼? 有沒有一種方法可以制作一個“添加”和“子”方法,並且列表視圖將知道在哪個視圖上單擊了該列表,並由此更新了它的數量?

public Dish(String dishName, int dishPrice, int Image, int quantity) {
    mdishName = dishName;
    mdishPrice = dishPrice;
    mdishPic = Image;
    mquantity = quantity;
}
public class DishAdapter extends ArrayAdapter<Dish> {
    public DishAdapter(Activity context, ArrayList<Dish> dishes){
        super(context, 0, dishes);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View listItemView = convertView;
        if(listItemView == null){
            listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_layout, parent, false);

        }
        final Dish currenDish = getItem(position);

        TextView dishName = (TextView) listItemView.findViewById(R.id.dishName);
        dishName.setText(currenDish.getDishName());

        TextView dishPrice = (TextView) listItemView.findViewById(R.id.dishPrice);
        dishPrice.setText(String.valueOf(currenDish.getDishPrice()));

        ImageView image = (ImageView) listItemView.findViewById(R.id.dishPic);
        image.setImageResource(currenDish.getDishPic());
        image.setVisibility(View.VISIBLE);

        TextView quantity = (TextView) listItemView.findViewById(R.id.quantity);
        quantity.setText(String.valueOf(currenDish.getQuantity()));

        return listItemView;
    }




    public class DesertsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.deserts_activity);

        final ArrayList<Dish> dishes = new ArrayList<Dish>();
        dishes.add(new Dish("Number Cake",180, R.drawable.cake_number, 0));
        dishes.add(new Dish("Ear of Haman", 40, R.drawable.ozen_haman, 0));
        dishes.add(new Dish("Alphachores", 35, R.drawable.alphachores, 0));
        dishes.add(new Dish("Snow Cookies", 35, R.drawable.snow_cookies, 0));



        DishAdapter adapter = new DishAdapter(this, dishes);
        final ListView listView = (ListView) findViewById(R.id.deserts_list);

        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                dishes.set(position, new Dish(dishes.get(position).getDishName(),
                        dishes.get(position).getDishPrice(), dishes.get(position).getDishPic(),
                        dishes.get(position).getQuantity()+1));
                TextView quantity = (TextView) view.findViewById(R.id.quantity);
                quantity.setText(String.valueOf(dishes.get(position).getQuantity()));

            }
        });
    }
}

在此處輸入圖片說明

您必須創建一個單獨的適配器類,然后在按鈕上應用按鈕單擊偵聽器。 我附上圖片以供參考。

和我的產品適配器是

public class ProductAdaptor extends RecyclerView.Adapter<ProductAdaptor.ViewHolder> {


    List<ProductsItem> productsItems;
    Context context;
    public ProductAdaptor(Context context, List<ProductsItem> productsItems)
    {
        this.context = context;
        this.productsItems = productsItems;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.single_product_design,viewGroup, false);
        return new ProductAdaptor.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
            final ProductsItem productsItem = productsItems.get(i);

            viewHolder.productname.setText(productsItem.getProductName());
        Glide.with(context).load(productsItem.getProductImageUrl()).into(viewHolder.productImage);
        viewHolder.stock.setText(productsItem.getStock());
        viewHolder.farmername.setText(productsItem.getFarmerName());
        // add listener on single Item
        viewHolder.btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Clicked", Toast.LENGTH_LONG).show();
            }
        });


        viewHolder.btnPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // apply code to increment the number 
                // first of all get the value form text counter and increment after that bind on the UI 
            }
        });

        viewHolder.btnMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // first of all get the value form text counter and decrement after that bind on the UI 
            }
        });

    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }


    @Override
    public int getItemCount() {
        return productsItems.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder
    {
        TextView productname;
        ImageView productImage;
        TextView stock, farmername, specility,qty;

        Button btnPlus, btnMinus;

        LinearLayout btnAdd;

        public ViewHolder(@NonNull View itemView)
        {
            super(itemView);

            productname = itemView.findViewById(R.id.productname);
            productImage = itemView.findViewById(R.id.productimage);
            stock = itemView.findViewById(R.id.stcokValue);
            farmername = itemView.findViewById(R.id.farmerName);
            qty = itemView.findViewById(R.id.qty);
            specility = itemView.findViewById(R.id.specility);

            btnPlus = itemView.findViewById(R.id.plusbutton);
            btnMinus = itemView.findViewById(R.id.minusbtn);
            btnAdd = itemView.findViewById(R.id.add_button);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM