[英]Parse different objects in onChanged() callback, Livedata
我想聽聽活動中不同領域的價值變化。 因此,我已經實現了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接收到該值,因此一種解決方法是在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) {
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.