gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:28:00 29 4
gpt4 key购买 nike

我想在一个 Activity 中监听不同字段的值变化。所以我实现了 Observer 接口(interface),并绑定(bind)了这些字段。我如何区分在 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 对象接收到该值,因此一种解决方法是使用 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) {

}
});

关于android - 在 onChanged() 回调中解析不同的对象,Livedata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165304/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com