在 onChanged() 回调中解析不同的对象,Livedata

Parse different objects in onChanged() callback, Livedata

我想监听activity中不同字段的值变化。 所以我实现了 Observer 接口,并绑定了这些字段。我如何区分在 onChanged() 中更改了哪个值,因为两个变量都有一个回调,或者什么是最好的 practice/efficient 方法(就内存消耗而言)来解析 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 接收到该值,一种解决方法是在 onChanged 中使用 instanceOf 运算符并检查其 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) {

    }
});