我想听听活动中不同领域的价值变化。
因此,我已经实现了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
运算符,并检查其Integer
或UserAccount
。
我建议您避免这种情况,因为它不是一个很好的设计并且很难维护。
您可以通过创建两个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/