【问题标题】:How to make 2 buttons for multiple listview elements如何为多个列表视图元素制作 2 个按钮
【发布时间】:2019-09-11 09:21:40
【问题描述】:

我正在创建一个用于订购食物的应用程序,并创建了一个 Dish 类和一个 Dish 数组适配器。 目前,您可以通过单击视图添加特定菜肴的数量。

但是,我希望有 2 个按钮来添加或减少数量。

如何为每道菜制作 2 个按钮,而无需为每个元素编写其 ows 按钮代码?有没有办法制作“添加”和“子”方法,并且列表视图会知道它在哪个视图上被点击并更新它的数量?

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

            }
        });
    }
}

【问题讨论】:

    标签: java android button android-listview


    【解决方案1】:

    您必须创建一个单独的适配器类,然后在按钮上应用按钮单击侦听器。我附上图片以供参考。

    我的产品适配器是

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

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      相关资源
      最近更新 更多