Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从arraylist显示到listview,计算每个重复对象并显示为一个对象_Java_Android_Listview_Arraylist - Fatal编程技术网

Java 将数据从arraylist显示到listview,计算每个重复对象并显示为一个对象

Java 将数据从arraylist显示到listview,计算每个重复对象并显示为一个对象,java,android,listview,arraylist,Java,Android,Listview,Arraylist,我是android的新手,正在开发一款电子商务应用程序。我有一个产品的模型类(指定产品名称、价格等) 我想将产品从arraylist显示到listview。但是,如果arraylist中有两个相同的产品(具有相同的productId),我希望它在ListView中只显示一行,数量为-2(请参见图片)。有人能帮我吗 以下是listview适配器类: public class MyOrdersProducts_Adapter extends BaseAdapter { Activity

我是android的新手,正在开发一款电子商务应用程序。我有一个产品的模型类(指定产品名称、价格等)

我想将产品从arraylist显示到listview。但是,如果arraylist中有两个相同的产品(具有相同的productId),我希望它在ListView中只显示一行,数量为-2(请参见图片)。有人能帮我吗

以下是listview适配器类:

public class MyOrdersProducts_Adapter extends BaseAdapter {

    Activity activity;
    ArrayList<Product> cartproductsList;
    Product tempValues;

    public MyOrdersProducts_Adapter(Activity activity,ArrayList<Product> cartproductsList){
        this.activity=activity;
        this.cartproductsList=cartproductsList;
    }

    @Override
    public int getCount() {
        return cartproductsList.size();
    }

    @Override
    public Object getItem(int i) {
        return cartproductsList.get(i);
    }

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

    class MyViewHolder{
        CheckBox checkBox;
        ImageView imageView;
        LinearLayout listRow;
        TextView price,title,quantity;

        public MyViewHolder(View v){
            checkBox=v.findViewById(R.id.checkbox_product);
            imageView=v.findViewById(R.id.img_product_list);
            price=v.findViewById(R.id.price_productlist);
            title=v.findViewById(R.id.title_productlist);
            quantity=v.findViewById(R.id.quantity_productlist);
            listRow=v.findViewById(R.id.productlist_row);

        }
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        View rowView=view;
        MyViewHolder holder;

        if(rowView==null){
            LayoutInflater inflater=activity.getLayoutInflater();
            rowView=inflater.inflate(R.layout.myordersproducts_row,null);
            holder=new MyViewHolder(rowView);
            rowView.setTag(holder);
        }
        else
            holder= (MyViewHolder) rowView.getTag();
        tempValues=cartproductsList.get(i);

        holder.imageView.setImageResource(tempValues.getImageUrl());
        holder.title.setText(tempValues.getProductName());
        holder.price.setText(tempValues.getMrp());

        return rowView;
    }
}
公共类MyOrdersProducts\u适配器扩展了BaseAdapter{
活动;
ArrayList CartsList;
产品价值观;
公共MyOrdersProducts_适配器(活动活动,ArrayList cartproductsList){
这个。活动=活动;
this.cartproductsList=cartproductsList;
}
@凌驾
public int getCount(){
返回cartproductsList.size();
}
@凌驾
公共对象getItem(int i){
返回cartproductsList.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
类MyViewHolder{
复选框;
图像视图图像视图;
线性布局列表行;
text查看价格、标题、数量;
公共MyViewHolder(视图v){
checkBox=v.findviewbyd(R.id.checkBox\u产品);
imageView=v.findViewById(R.id.img\u产品列表);
价格=v.findviewbyd(R.id.price\u productlist);
title=v.findviewbyd(R.id.title\u productlist);
数量=v.findviewbyd(R.id.quantity\u productlist);
listRow=v.findviewbyd(R.id.productlist_行);
}
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
视图行视图=视图;
我的视窗持有人;
if(rowView==null){
LayoutInflater充气器=活动。getLayoutInflater();
rowView=充气机。充气(R.layout.myordersproducts_行,空);
holder=新的MyViewHolder(行视图);
rowView.setTag(支架);
}
其他的
holder=(MyViewHolder)rowView.getTag();
tempValues=cartproductsList.get(i);
holder.imageView.setImageResource(tempValues.getImageUrl());
holder.title.setText(tempValues.getProductName());
holder.price.setText(tempValues.getMrp());
返回行视图;
}
}
编辑:

请注意,我无法使用HashSet(用于创建唯一列表)或HashMap(用于映射具有整数计数值的产品),因为我无法将数据从HashSet设置为BaseAdapter

但是如果arraylist中有相同的产品(具有相同的productId) 两次


为什么不避免在
ArrayList
中添加具有相同
产品id的产品呢?在
ArrayList
中添加任何产品之前,请检查
ArrayList
中的任何现有产品是否具有相同的
产品id
。如果存在具有相同
产品id的产品,请不要添加该产品。这样,您将拥有一个具有唯一
产品id的
产品列表

向ArrayList添加项目时,需要添加一个检查,以查看是否已经存在相同的产品。确保在产品类中添加数量字段,当您遇到重复时,只需增加数量。

在将数据添加到
回收视图之前过滤数据,例如:

// Beware, this is pseudo code
void addData(List<Product> items) {
    HashMap<String, ProductItem> newItems = new HashMap<>();
    for (ProductItem item: items) {
        if (newItems.containsKey(item.id)) {
            newItems.get(item.id).incrementQuantity();
        } else {
            newItems.put(item.id, item);
        }
     }
     adapter.add(newItems.values())
}
//小心,这是伪代码
void addData(列表项){
HashMap newItems=新HashMap();
对于(ProductItem:items){
if(newItems.containsKey(item.id)){
newItems.get(item.id).incrementQuantity();
}否则{
newItems.put(item.id,item);
}
}
adapter.add(newItems.values())
}

Duplicate of可能重复的尝试在将其设置到适配器之前检查重复的产品,这比在recycler/list ViewThank@UMESH0492中计算它更容易。请查看编辑。感谢您的回答,但这将创建一个唯一的列表。我还需要显示数量(产品重复的次数)。请注意,我不能在产品模型类中添加数量变量。在我的项目中,在产品模型类中添加数量变量不是一个好主意。你能提出一个替代方案吗?
// Beware, this is pseudo code
void addData(List<Product> items) {
    HashMap<String, ProductItem> newItems = new HashMap<>();
    for (ProductItem item: items) {
        if (newItems.containsKey(item.id)) {
            newItems.get(item.id).incrementQuantity();
        } else {
            newItems.put(item.id, item);
        }
     }
     adapter.add(newItems.values())
}