簡體   English   中英

在onChanged()回調,Livedata中解析不同的對象

[英]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運算符,並檢查其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) {

    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM