【问题标题】:Append ArrayList<HashMap<String, String>> to another ArrayList<HashMap<String, String>>将 ArrayList<HashMap<String, String>> 附加到另一个 ArrayList<HashMap<String, String>>
【发布时间】:2016-02-25 14:32:30
【问题描述】:

我正在使用ArrayList&lt;HashMap&lt;String, String&gt;&gt; 来存储我的购物车物品。每次将商品添加到购物车时,都会将商品详细信息设置为ArrayList,然后调用setCart() 方法。

我想如果ArrayList 中的项目已经存在,那么通过调用setCart() 它不会覆盖以前的购物车项目。而是将ArrayList 附加到已经存在的ArrayList 的末尾。我使用了 ArrayList.add() 方法,但它仅适用于 HashMap&lt;String,String&gt; 不适用于 ArrayList&lt;HashMap&lt;String, String&gt;&gt;

public class AddtoCart extends Application {
  ArrayList<HashMap<String, String>> cart;

  public void setCart(ArrayList<HashMap<String, String>> data) {
    cart = data;
  }

  public ArrayList<HashMap<String, String>> getCart() {
    return cart;
  }

  public int getSize() {
    return cart.size();
  }
}

AddtoCart 中设置ArrayListaddtocart 按钮上调用的方法

private OnClickListener Cart = new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        cart = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
            map.put(TAG_PID, pid);
            map.put(TAG_NAME, name);
            map.put(TAG_CATEGORY, category);
            map.put(TAG_PRICE, price);
            map.put(TAG_IMAGE,String.valueOf(resId));
            cart.add(map);

            AddtoCart obj = (AddtoCart) getApplicationContext();
            obj.setCart(cart);

        Intent a = new Intent("com.example.pb.VIEWCART");
        startActivity(a);
    }
};

}

【问题讨论】:

  • 查一下ArrayList.addAll
  • 当你想更新一个数组列表时,你可以使用 .set 并给出你想更新的索引和新的对象

标签: java android arraylist hashmap


【解决方案1】:


我有建议给你。
我们必须设计 CartItem 类而不是 HashMap 以使将来的更改更容易。 如果您想在后期添加任何新的标签相关属性,我们可以将这些属性添加到 CartItem 类。它将有助于在您的代码中实现模块化对象。
例子:

public class CartItems
{

    int tagPid;
    String tagCategoy;
    int price
    String tagImage;

    // getters and setters methods of above attributes
}


public class AddtoCart extends Application {
ArrayList<CartItems> cart;

//remaining code
}

【讨论】:

    【解决方案2】:

    像这样更新你的方法

    public void setCart(ArrayList<HashMap<String, String>> data) {
        if(cart != null && cart.size() > 0)
            cart.addAll(data);
        else
            cart = data;
    }
    

    或者如果你像这样声明你的ArrayList

    ArrayList<HashMap<String, String>> cart = new ArrayList<HashMap<String, String>>();
    

    您可以删除if-else 条件并执行cart.addAll(data);

    【讨论】:

    • 第一种情况不起作用,除非变量被初始化——它会给出一个 NPE。
    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2018-01-05
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多