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

时间:2018-07-04 03:22:05

标签: android android-livedata

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

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?
    }
}

1 个答案:

答案 0 :(得分:0)

由于Observer的类型(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) {

    }
});