迭代项目数量,自定义适配器

Posted

技术标签:

【中文标题】迭代项目数量,自定义适配器【英文标题】:Iterate quantity for items , custom adapter 【发布时间】:2020-05-27 01:32:54 【问题描述】:

我有一个列表视图,其中每个项目都有一个 TextView 和 2 个按钮( + 和 - )。当我按下 + 按钮时,我想从 TextView 迭代数量。在此之后,我需要总结列表中每个项目的所有项目(价格 * 项目数量)并将结果放入新的 TextView(总成本)。那是我的适配器和主要活动。感谢您的帮助。

public class cartItemsAdapter extends BaseAdapter 
    private ArrayList<items> itemsList;
    private Context context;


    public cartItemsAdapter(ArrayList<items> list,Context cont)
        this.itemsList = list;
        this.context=cont;
    

    @Override
    public int getCount() 
        return this.itemsList.size();
    

    @Override
    public Object getItem(int position) 
        return this.itemsList.get(position);
    

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
        ViewHolder holder = null;

        if(convertView==null)
            LayoutInflater inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inf.inflate(R.layout.list_cart_item_view,null);

            holder = new ViewHolder();
            holder.imageView = (ImageView)convertView.findViewById(R.id.icon_item);
            holder.nameView = (TextView) convertView.findViewById(R.id.name_item);
            holder.priceView=(TextView)convertView.findViewById(R.id.price_item);
            holder.plusButton = (Button) convertView.findViewById(R.id.cart_plus_button);
            holder.minusButton = (Button) convertView.findViewById(R.id.cart_minus_button);
            holder.removeButton = (Button) convertView.findViewById(R.id.cart_remove_button);
            holder.quantityView = (TextView) convertView.findViewById(R.id.cart_quantity_view);

            convertView.setTag(holder);
        else
            holder=(ViewHolder)convertView.getTag();
        

        items itm = itemsList.get(position);
        holder.imageView.setImageResource(itm.getlImageId());
        holder.nameView.setText(itm.getlName());
        holder.priceView.setText(itm.getlPrice() + " $");
        holder.quantityView.setText("1");

            /*holder.plusButton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                int pquant=Integer.valueOf(quant.toString());
                pquant++;


            
        );
        holder.minusButton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                int mquant=Integer.valueOf(quant.toString());
                mquant--;
            
        );*/


        return convertView;
    

    private static class ViewHolder
        public ImageView imageView;
        public TextView nameView;
        public TextView priceView;
        public Button plusButton;
        public Button minusButton;
        public Button removeButton;
        public TextView quantityView;
    



protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cart);

    plusBtn = findViewById(R.id.cart_plus_button);
    minusBtn = findViewById(R.id.cart_minus_button);
    removeBtn = findViewById(R.id.cart_remove_button);
    quantity = findViewById(R.id.cart_quantity_view);

    listView = (ListView) findViewById(R.id.cart_category_listview);
    favoriteDbHelper = new DatabaseHelper(this);
    item = favoriteDbHelper.getAllDataCart();
    myAdapter = new cartItemsAdapter(item, this);
    listView.setAdapter(myAdapter);

【问题讨论】:

【参考方案1】:

其实你的这段代码很接近:

    holder.plusButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            int pquant=Integer.valueOf(quant.toString());
            pquant++;


        
    );
    holder.minusButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            int mquant=Integer.valueOf(quant.toString());
            mquant--;
        
    );

您需要做的就是访问onClick(View v) 内的itemsList。为了简单起见,试试这个:

holder.plusButton.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        int position = getAdapterPosition();
        Items item = itemsList.get(position);
        //now you can get your quant by accessing this item object
    
);

关键是使用getAdapterPosition()获取当前位置。

【讨论】:

我试试你说的,但我失败了,你能告诉我我需要做什么才能访问和修改吗? 假设int quant 存在于您的Items 类中,您可以使用item.setQuant(item.getQuant() + 1); 访问它。或者,也许您可​​以提供更多关于您将这个 quant 整数存储在哪里的信息?

以上是关于迭代项目数量,自定义适配器的主要内容,如果未能解决你的问题,请参考以下文章

使自定义容器可迭代

未调用自定义适配器 getView() 方法

动态定义项目时如何创建自定义数组适配器

自定义适配器未显示任何项目

如何从自定义基础适配器中删除项目?

完全无响应的 Android 自定义适配器