在Android Studio中,我正在编写一项活动,该活动允许用户修改名为product
的特定对象。用户还可以选择保存所做的修改。我的目标是,当用户想要退出活动并且尚未保存修改时,会显示一条通知,告知用户尚未保存修改。
为此,我已执行以下步骤:
OnCreate
方法中,将复制对象product
,称为savedProduct
。product
。product
的值存储在savedProduct
中。product
和savedProduct
。当它们不同时,会通知用户。问题在于,只要修改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());
答案 0 :(得分:2)
当您执行以下操作时:
productUpToDate = product;
您必须记住,两个变量现在都只引用同一对象。当您修改一个时,它将修改另一个。您可以执行以下操作:
productUpToDate = (Product) SerializationUtils.clone(product);