gpt4 book ai didi

java - Activity 中的两个对象,修改一个对象会自动修改另一个对象

转载 作者:行者123 更新时间:2023-12-02 01:59:28 25 4
gpt4 key购买 nike

在 Android Studio 中,我正在编写一个 Activity ,让用户可以修改名为 product 的某个对象。用户还可以选择保存所做的修改。我的目标是,当用户想要离开 Activity 并且修改尚未保存时,会显示一条通知,告诉用户修改尚未保存。

为了实现这一目标,我实现了以下步骤:

  1. OnCreate 方法中,创建了 product 对象的副本,称为 savedProduct
  2. 当用户修改值时,这些更改将应用​​于产品
  3. 当用户保存修改时,product 的值将存储在 savedProduct 中。
  4. 当用户想要离开 Activity 时,将比较对象 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());

最佳答案

当你做这样的事情时:

productUpToDate = product;

您必须记住,两个变量现在只是引用同一个对象。当你修改一个时,它也会修改另一个。你可以这样做:

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

关于java - Activity 中的两个对象,修改一个对象会自动修改另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com