在 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
运算符并检查其 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) {
}
});
我想监听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
运算符并检查其 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) {
}
});