活动中的两个对象(修改一个对象会自动修改另一个对象

时间:2018-08-14 22:59:03

标签: java android-studio object

在Android Studio中,我正在编写一项活动,该活动允许用户修改名为product的特定对象。用户还可以选择保存所做的修改。我的目标是,当用户想要退出活动并且尚未保存修改时,会显示一条通知,告知用户尚未保存修改。

为此,我已执行以下步骤:

  1. OnCreate方法中,将复制对象product,称为savedProduct
  2. 用户修改值时,这些更改将应用​​于product
  3. 用户保存修改后,product的值存储在savedProduct中。
  4. 当用户想要退出活动时,将比较对象productsavedProduct。当它们不同时,会通知用户。

问题在于,只要修改product中的字段,这些更改就会自动应用于savedProduct。这是一个问题,因为它们现在始终相等,并且savedProduct不再保存已保存的数据。

我认为问题在于savedProduct的初始化方式。以下是一些我如何尝试初始化savedProduct的示例。

Product product, savedProduct;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activitylayout);

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        product = (Product) bundle.getSerializable("product");
        if (product != null) {
            savedProduct = product;
        }
    }
}

Product product, savedProduct;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activitylayout);

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        product = (Product) bundle.getSerializable("product");
        if (product != null) {
            savedProduct = new Product(null,null);
            savedProduct.setName(product.getName());
            savedProduct.setPrice(product.getPrice());
        }
    }
}

用户修改值时,修改内容将通过以下方式存储到product中。

product.setName(nameEditText.getText().toString().trim());
product.setPrice(priceEditText.getText().toString().trim());

1 个答案:

答案 0 :(得分:2)

当您执行以下操作时:

productUpToDate = product;

您必须记住,两个变量现在都只引用同一对象。当您修改一个时,它将修改另一个。您可以执行以下操作:

productUpToDate = (Product) SerializationUtils.clone(product);