代码之家  ›  专栏  ›  技术社区  ›  BramH

活动中的两个对象,修改其中一个将自动修改另一个

  •  0
  • BramH  · 技术社区  · 6 年前

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

    为此,我实施了以下步骤:

    1. OnCreate 方法,对象的副本 产品 被称为 savedProduct .
    2. 当用户修改值时,这些更改将应用于 产品 .
    3. 当用户保存修改时, 产品 存储在 节约产品 .
    4. 当用户想要离开活动时,对象 产品 节约产品 进行了比较。当它们不同时,会通知用户。

    问题是无论何时 产品 被修改,这些更改将自动应用于 节约产品 . 这是一个问题,因为他们现在总是平等的,而且 节约产品 不再保存保存的数据。

    我认为问题在于 节约产品 已初始化。下面是一些我尝试初始化的示例 节约产品 .

    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.setName(nameEditText.getText().toString().trim());
    product.setPrice(priceEditText.getText().toString().trim());
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Josh    6 年前

    当你这样做的时候:

    productUpToDate = product;
    

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

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