我想听听活动中不同领域的价值变化。
因此,我已经实现了Observer接口,并绑定了这些字段。如何区分onChanged()中哪个值已更改,因为两个变量都有一个回调,或者解析onChanged()中的传入对象的最佳实践/有效方式(就内存消耗而言)是什么?

public abstract class BaseActivity extends AppCompatActivity implements Observer {

    public MutableLiveData<Integer> status;
    public MutableLiveData<UserAccount> userAccount;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        status.observe(this, this);
        userAccount.observe(this, this);
    }

    @Override
    public void onChanged(@NonNull Object o) {
        // Best practice to parse/know different object types?
    }
}

最佳答案

由于观察者的类型(Integer,UserAccount)不同,因此应避免以这种方式实现。

由于没有状态对象指示哪个MutableLiveData obj接收到该值,因此一种解决方法是在instanceOf中使用onChanged运算符,并检查其IntegerUserAccount

我建议您避免这种情况,因为它不是一个很好的设计并且很难维护。

您可以通过创建两个Observers一个(分别使用Observer<Integer>和另一个使用Observer<UserAccount>)来分离关注点,如下所示:

class StatusObserver implements Observer<Integer> {
    @Override
    public void onChanged(@NonNull Integer status) {
        // do something
    }
}

class UserAccountObserver implements Observer<UserAccount> {
    @Override
    public void onChanged(@NonNull UserAccount userAccount) {
        // do something
    }
}


这是一种更干净的方法,易于维护,并且由于您已将其分开,因此更改状态处理不会影响userAccount的处理。

或者,您可以将它们实现为匿名类,如下所示:

status.observe(this, new Observer<Integer>() {
    @Override
    public void onChanged(@Nullable final Integer integer) {

    }
});

关于android - 在onChanged()回调,Livedata中解析不同的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51165304/

10-12 01:53