`onChanged`方法会在我们更改数据时触发吗?即使我们不改变活动状态?

时间:2018-01-19 12:51:32

标签: android viewmodel android-livedata

如果我们不更改活动状态或重新启动活动,是否会调用onChanged方法? (即使数据发生变化)。如果它没有发生,我该如何实现呢?

onCreate() {
    viewModel.getHolidaysDatesFromServer(..).observe(.....this,new Observer<GetHolidaysDatesFromServer>) {
        onChanged(GetHolidaysDatesFromServer GetHolidaysDatesFromServer)
    }    
}

和我的ViewModel类......

public class CalendarLifeCycleOwner extends AndroidViewModel {
    Context context;
    MutableLiveData<GetHolidaysDatesFromServer> MutableLiveDataGetHolidays=new MutableLiveData<>();
    public CalendarLifeCycleOwner(@NonNull Application application) {
        super(application);
        this.context=application.getApplicationContext();
    }

    public MutableLiveData<GetHolidaysDatesFromServer> getHolidaysDatesFromServer(String upd_token,int product_id) {
        JustProductId justProductId=new JustProductId();
        justProductId.setProduct_id(product_id);
        UserListInterface userListInterface= UserListService.createService(UserListInterface.class, Utility.ACCEPT_HEADER_V4);
        Call<GetHolidaysDatesFromServer> getHolidaysDatesFromServerCall=userListInterface.GetProductHolidays(upd_token,justProductId);
        getHolidaysDatesFromServerCall.enqueue(new Callback<GetHolidaysDatesFromServer>() {
            @Override
            public void onResponse(Call<GetHolidaysDatesFromServer> call, Response<GetHolidaysDatesFromServer> response) {
                if (response.isSuccessful()) {
                    GetHolidaysDatesFromServer getHolidaysDatesFromServer=response.body();
                    MutableLiveDataGetHolidays.postValue(getHolidaysDatesFromServer);
                }
            }

            @Override
            public void onFailure(Call<GetHolidaysDatesFromServer> call, Throwable t) {
                ErrorObject errorObject=new ErrorObject(t);
                GetHolidaysDatesFromServer getHolidaysDatesFromServer=new GetHolidaysDatesFromServer();
                getHolidaysDatesFromServer.setErrorObject(errorObject);
                MutableLiveDataGetHolidays.setValue(getHolidaysDatesFromServer);

            }
        });
        return MutableLiveDataGetHolidays;
    }
}

但是我刚刚更改数据后onChanged()没有被调用......

2 个答案:

答案 0 :(得分:1)

Google实际上described将该问题(或对此非常熟悉)作为开发峰会上的反模式。 推荐的方法是使用switchMap类中的android.arch.lifecycle.Transformations。 您可以查看documentation page了解更多详细信息。

答案 1 :(得分:0)

尝试使用它并删除全局MutableLiveData变量

public MutableLiveData<GetHolidaysDatesFromServer> getHolidaysDatesFromServer(String upd_token,int product_id) {

       MutableLiveData<GetHolidaysDatesFromServer> MutableLiveDataGetHolidays=new MutableLiveData<>();

       //Your API call code goes here

       return MutableLiveDataGetHolidays;
 }