【问题标题】:How to implement nested live data?如何实现嵌套的实时数据?
【发布时间】:2019-07-13 14:59:51
【问题描述】:

如何在android中实现嵌套直播数据:我需要将serverMovies传递给第二级直播数据

这可能吗?

   activityViewModel.getAllMovies().observe(this, new Observer<List<Movie>>() {
                @Override
                public void onChanged(List<Movie> serverMovies) {
                    Log.d("",serverMovies+"");

                    activityViewModel.insertMoviesIntoLocalDatabase(serverMovies).observe(this, new Observer<List<Movie>>() {
                        @Override
                        public void onChanged(@Nullable List<Movie> movies) {
                            Log.d("",movies+"");
                            /*contactArrayList.clear();
                            contactArrayList.addAll(contacts);
                            contactsAdapter.notifyDataSetChanged();*/

                        }
                    });
                }


     });

【问题讨论】:

    标签: android mvvm android-architecture-components android-livedata android-jetpack


    【解决方案1】:

    我也可以使用switchmap

    Transformations.switchMap(
          activityViewModel.getAllMovies(), (x) ->
          activityViewModel.insertMoviesIntoLocalDatabase(x))
          .observe(this, movies ->
           movieAdapter.setData(new ArrayList<>(movies))
     );
    

    【讨论】:

      【解决方案2】:

      您需要添加一个Mediator Live Data,以响应电影实时数据的变化。

      这样的,

      LiveData<List<Movies>> moviesLiveData = getAllMovies();
      MediatorLiveData mediatorLiveData = new MediatorLiveData<>();
      mediatorLiveData.addSource(moviesLiveData, value -> mediatorLiveData.setValue(value));
      

      所以当原始实时数据的值发生变化时,中介实时数据的值也发生变化,那么您可以随意观察它。

      【讨论】:

        猜你喜欢
        • 2021-06-20
        • 2023-03-29
        • 2011-05-06
        • 2012-01-01
        • 2017-10-21
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多