Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
CommentAdapter.java
/* * Copyright 2017, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.persistence.ui; import android.databinding.DataBindingUtil; import android.support.annotation.Nullable; import android.support.v7.util.DiffUtil; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.ViewGroup; import com.example.android.persistence.databinding.CommentItemBinding; import com.example.android.persistence.model.Comment; import com.example.android.persistence.R; import java.util.List; import java.util.Objects; public class CommentAdapter extends RecyclerView.Adapter
{ private List extends Comment> mCommentList; @Nullable private final CommentClickCallback mCommentClickCallback; public CommentAdapter(@Nullable CommentClickCallback commentClickCallback) { mCommentClickCallback = commentClickCallback; } public void setCommentList(final List extends Comment> comments) { if (mCommentList == null) { mCommentList = comments; notifyItemRangeInserted(0, comments.size()); } else { DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DiffUtil.Callback() { @Override public int getOldListSize() { return mCommentList.size(); } @Override public int getNewListSize() { return comments.size(); } @Override public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { Comment old = mCommentList.get(oldItemPosition); Comment comment = comments.get(newItemPosition); return old.getId() == comment.getId(); } @Override public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { Comment old = mCommentList.get(oldItemPosition); Comment comment = comments.get(newItemPosition); return old.getId() == comment.getId() && old.getPostedAt() == comment.getPostedAt() && old.getProductId() == comment.getProductId() && Objects.equals(old.getText(), comment.getText()); } }); mCommentList = comments; diffResult.dispatchUpdatesTo(this); } } @Override public CommentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { CommentItemBinding binding = DataBindingUtil .inflate(LayoutInflater.from(parent.getContext()), R.layout.comment_item, parent, false); binding.setCallback(mCommentClickCallback); return new CommentViewHolder(binding); } @Override public void onBindViewHolder(CommentViewHolder holder, int position) { holder.binding.setComment(mCommentList.get(position)); holder.binding.executePendingBindings(); } @Override public int getItemCount() { return mCommentList == null ? 0 : mCommentList.size(); } static class CommentViewHolder extends RecyclerView.ViewHolder { final CommentItemBinding binding; CommentViewHolder(CommentItemBinding binding) { super(binding.getRoot()); this.binding = binding; } } }