java - 将数组列表中的数据显示到 ListView ,对每个重复对象进行计数并显示为一个对象

标签 java android listview arraylist

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

public class Product implements Serializable {

    /**
     * The item Merchant Name.
     */
    private String merchantName = "";

    /**
     * The item desc.
     */
    private String description = "";

    /**
     * The mrp.
     */
    private String mrp;

    /**
     * The discount.
     */
    private String discount;

    /**
     * The image url.
     */
    private int imageUrl;

    private String productName = "";

    private String productId = "";

    public Product(String description, String mrp, String discount,
                   int imageUrl, String productName, String productId, String merchantName) {

        this.description = description;
        this.mrp = mrp;
        this.discount = discount;
        this.imageUrl = imageUrl;
        this.productName = productName;
        this.productId = productId;
        this.merchantName=merchantName;
    }

    public void setMerchantName(String merchantName) {
        this.merchantName = merchantName;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setMrp(String mrp) {
        this.mrp = mrp;
    }

    public void setDiscount(String discount) {
        this.discount = discount;
    }

    public void setImageUrl(int imageUrl) {
        this.imageUrl = imageUrl;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public String getMerchantName(){
        return merchantName; }

    public String getDescription() {
        return description;
    }

    public String getMrp() {
        return mrp;
    }

    public String getDiscount() {
        return discount;
    }

    public int getImageUrl() {
        return imageUrl;
    }

    public String getProductName() {
        return productName;
    }

    public String getProductId() {
        return productId;
    }

}

我想将产品从数组列表显示到 ListView 。但是,如果 arraylist 中有两次相同的产品(具有相同的 ProductId),我希望它在 ListView 上仅显示一行且数量为 2(请参见图片)。谁能帮我解决这个问题吗?

See second and third item displaying seperately in the list

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

编辑:

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

最佳答案

But if there is same product (with same productId) in the arraylist twice

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

关于java - 将数组列表中的数据显示到 ListView ,对每个重复对象进行计数并显示为一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47963594/

相关文章:

android - 配置 RecyclerView 以作为聊天工具工作

Android 软键盘显示在对话框 fragment 下

android - 自定义 ListView 不响应click事件

java - 通过适配器显示 JSONArray 到 ListView

java - Gemfire 使用 gfsh 启动 : ClassNotFound error in gfsh start server

c# - Xamarin.Android 重新部署应用程序不会更新程序集

android - 在Android应用程序中使用.so库时出错

java - 创建 spring boot ConfigurationProperties Map<String, Object> 时的空指针

java - 游戏结束后重新开始游戏

android - Android Studio 2.0 Gradle错误[NoClassDefFoundError:无法初始化类org.gradle.StartParameter]