我想听听一项活动中不同领域的价值变化。
因此,我已经实现了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?
}
}
答案 0 :(得分:0)
由于Observer的类型(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) {
}
});