【问题标题】:Activity Object List gets modified from dialog Object List活动对象列表从对话框对象列表中修改
【发布时间】:2018-03-14 13:29:12
【问题描述】:

我有一个activity,我从中创建了一个传递list of objects 的对话框。 在对话框中,我修改了全局object list 数据。

问题是我的活动object list 也是从对话框数据操作中修改的。我没有使用任何侦听器或方法来处理调用者类数据。 AFAIK 这些是一个单独的对象,没有相同的引用,所以它不应该改变。

活动调用者部分:

ProductQuantityReviewDialog dialog = new ProductQuantityReviewDialog(context, salesOrderList);
dialog.show();

对话框类:

private HashMap<Integer, OrderSalesModel> salesOrderList;

public ProductQuantityReviewDialog(@NonNull Context context, HashMap<Integer, OrderSalesModel> salesOrderList) {
        super(context);
        this.context = context;
        this.salesOrderList = salesOrderList;
    }

更新: 以这种方式尝试但同样的问题。

    public ProductQuantityReviewDialog(@NonNull Context context, HashMap<Integer, OrderSalesModel> salesOrderList) {
        super(context);
        this.context = context;
        orderList = new HashMap<>(salesOrderList);
       // orderList.putAll(salesOrderList);
}

【问题讨论】:

    标签: java android hashmap android-dialog


    【解决方案1】:

    在构造函数中传递引用使对话框哈希映射引用与活动哈希映射相同的地址。而不是传递引用,您应该在对话框中维护一个单独的列表。

    private Map<Integer, OrderSalesModel> mSalesOrderList;
    
    public RetrieveInput(@NonNull Context context, HashMap<Integer, OrderSalesModel> salesOrderList) {
        super(context);
        this.context = context;
        copyDataToMap(salesOrderList);
    }
    
    private void copyDataToMap(HashMap<Integer, OrderSalesModel> salesOrderList) {
        mSalesOrderList = new HashMap<>();
        for (Map.Entry<Integer, OrderSalesModel> entry : salesOrderList.entrySet())
        {
            mSalesOrderList.put(entry.getKey(), entry.getValue());
        }
    }
    

    【讨论】:

    • orderList = new HashMap&lt;&gt;(); orderList.putAll(salesOrderList); 更改为此但不起作用。同样的问题
    • 试试这个更新的代码。这应该可以工作..你遇到同样的问题吗?
    • 试过了。一样!上一个活动中更新的列表值。
    • 试试这个最终编辑的代码..这会起作用..如果它不起作用,请告诉我
    • 同样的问题!这是原因吗? stackoverflow.com/a/17659412/7267105
    【解决方案2】:

    在您的代码中。您正在传递 hashmap 的引用。所以另一个 hashmap 也是 alter 。

    在对话框中初始化新的 hashmap 并为其设置所有值。

    【讨论】:

    • 两个都试过了!仍然遇到同样的问题。查看更新部分
    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多