Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
ProductAdapter.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.ProductItemBinding; import com.example.android.persistence.model.Product; import com.example.android.persistence.R; import java.util.List; import java.util.Objects; public class ProductAdapter extends RecyclerView.Adapter
{ List extends Product> mProductList; @Nullable private final ProductClickCallback mProductClickCallback; public ProductAdapter(@Nullable ProductClickCallback clickCallback) { mProductClickCallback = clickCallback; } public void setProductList(final List extends Product> productList) { if (mProductList == null) { mProductList = productList; notifyItemRangeInserted(0, productList.size()); } else { DiffUtil.DiffResult result = DiffUtil.calculateDiff(new DiffUtil.Callback() { @Override public int getOldListSize() { return mProductList.size(); } @Override public int getNewListSize() { return productList.size(); } @Override public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { return mProductList.get(oldItemPosition).getId() == productList.get(newItemPosition).getId(); } @Override public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { Product newProduct = productList.get(newItemPosition); Product oldProduct = mProductList.get(oldItemPosition); return newProduct.getId() == oldProduct.getId() && Objects.equals(newProduct.getDescription(), oldProduct.getDescription()) && Objects.equals(newProduct.getName(), oldProduct.getName()) && newProduct.getPrice() == oldProduct.getPrice(); } }); mProductList = productList; result.dispatchUpdatesTo(this); } } @Override public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ProductItemBinding binding = DataBindingUtil .inflate(LayoutInflater.from(parent.getContext()), R.layout.product_item, parent, false); binding.setCallback(mProductClickCallback); return new ProductViewHolder(binding); } @Override public void onBindViewHolder(ProductViewHolder holder, int position) { holder.binding.setProduct(mProductList.get(position)); holder.binding.executePendingBindings(); } @Override public int getItemCount() { return mProductList == null ? 0 : mProductList.size(); } static class ProductViewHolder extends RecyclerView.ViewHolder { final ProductItemBinding binding; public ProductViewHolder(ProductItemBinding binding) { super(binding.getRoot()); this.binding = binding; } } }