美文网首页
Android架构组件

Android架构组件

作者: tesla1984 | 来源:发表于2018-09-26 14:20 被阅读0次

    ViewModel和LiveData-模式与反模式

    改造 Android 官方架构组件 ViewModel

    使用Android架构组件实现MVVM模式的应用

    LiveData通过使用Transform来关联ViewModel和DataModel
    Transform LiveData

    public class DataModel {
    
        ...
    
        public MutableLiveData<List<Repo>> searchRepo(String query) {
            final MutableLiveData<List<Repo>> repos = new MutableLiveData<>();
            githubService.searchRepos(query)
                    .enqueue(new Callback<RepoSearchResponse>() {
                        @Override
                        public void onResponse(@NonNull Call<RepoSearchResponse> call, @NonNull Response<RepoSearchResponse> response) {
                            repos.setValue(response.body().getItems());
                        }
    
                        ...
                    });
            return repos;
        }
    }
    

    在ViewModel中不使用transform,我们一般会写成这样

    public class RepoViewModel extends ViewModel {
    
       ...
    
       MutableLiveData<List<Repo>> searchRepo(String query) {
           // NO!
           return dataModel.searchRepo(query);
       }
    }
    

    这样写存在一定问题

    DataModel中已经准备好了LiveData,好像ViewModel可以不用再处理,可以直接交给View,但是存在下面两个问题

    1. 每次searchRepo方法调用的时候,DataModel中都会生成新的LiveData,这样View每次针对新的LiveData用新的Observe
    2. 当View recreate的时候,会再次调用searchRepo方法,导致DataModel又进行一次操作

    需要使用Transformations
    Transformations不会使LiveData变成新的instance,因此View一直都是对repos做observe,解决了上面提到的两个问题。

    相关文章

      网友评论

          本文标题:Android架构组件

          本文链接:https://www.haomeiwen.com/subject/uqvanftx.html