美文网首页
48. Paging的使用

48. Paging的使用

作者: 任振铭 | 来源:发表于2021-05-28 08:16 被阅读0次

    1.确保使用的RecyclerView是androidx.recyclerview.widget.RecyclerView
    2.给RecyclerView设置的Adapter不再是RecyclerView.Adapter而是PagedListAdapter
    3.在Adapter初始化的时候,传入一个ItemCallback,用于判断item是否是同一个,注意Student要实现equals 和 hashCode两个方法用于比较

         protected MyPageListAdapter() {
            super(new DiffUtil.ItemCallback<Student>() {
                @Override
                public boolean areItemsTheSame(@NonNull Student oldItem, @NonNull Student newItem) {
                    Log.d("MyPageListAdapter", "areItemsTheSame oldItem.getId() = " + oldItem.getId() + " newItem.getId() = " + newItem.getId());
                    return oldItem.getId() == newItem.getId();
                }
    
                @Override
                public boolean areContentsTheSame(@NonNull Student oldItem, @NonNull Student newItem) {
                    Log.d("MyPageListAdapter", "areContentsTheSame oldItem = " + oldItem + " newItem = " + newItem);
                    return oldItem.equals(newItem);
                }
            });
        }
    

    4.Adapter需要的数据源由LivePagedListBuilder类提供

            pagedListLiveData = new LivePagedListBuilder(new DataSource.Factory() {
                @NonNull
                @Override
                public DataSource create() {
                    return new PositionalDataSource() {
                        @Override
                        public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {
                            Log.d("StudentViewModel", "loadInitial params = " + params.pageSize + " start position = " + params.requestedStartPosition);
                            callback.onResult(getStudents(0, 20), 0, 1000);
                        }
    
                        @Override
                        public void loadRange(@NonNull LoadRangeParams params, @NonNull LoadRangeCallback callback) {
                            Log.d("StudentViewModel", "loadRange params = " + params.loadSize + " start position = " + params.startPosition);
                            callback.onResult(getStudents(params.startPosition, params.loadSize));
                        }
                    };
                }
            }, 20).build();
    

    5.LivePagedListBuilder build出来的是一种LiveData<PagedList<Value>>类型的数据,通过监听数据的变化来更新adapter

           pagedListLiveData.observe(this, new Observer<PagedList<Student>>() {
                @Override
                public void onChanged(PagedList<Student> students) {
                    adapter.submitList(students);
                }
            });
    

    相关文章

      网友评论

          本文标题:48. Paging的使用

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