/* * Copyright (C) 2016 huanghaibin_dev * WebSite https://github.com/MiracleTimes-Dev * 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.haibin.oldcalendarview; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; /** * 基本的适配器 */ abstract class BaseRecyclerAdapter extends RecyclerView.Adapter { LayoutInflater mInflater; private List mItems; private OnItemClickListener onItemClickListener; private OnClickListener onClickListener; BaseRecyclerAdapter(Context context) { this.mItems = new ArrayList<>(); mInflater = LayoutInflater.from(context); onClickListener = new OnClickListener() { @Override public void onClick(int position, long itemId) { if (onItemClickListener != null) onItemClickListener.onItemClick(position, itemId); } }; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final RecyclerView.ViewHolder holder = onCreateDefaultViewHolder(parent, viewType); if (holder != null) { holder.itemView.setTag(holder); holder.itemView.setOnClickListener(onClickListener); } return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { onBindViewHolder(holder, mItems.get(position), position); } abstract RecyclerView.ViewHolder onCreateDefaultViewHolder(ViewGroup parent, int type); abstract void onBindViewHolder(RecyclerView.ViewHolder holder, T item, int position); @Override public int getItemCount() { return mItems.size(); } void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @SuppressWarnings("unused") void addAll(List items) { if (items != null && items.size() > 0) { mItems.addAll(items); notifyItemRangeInserted(mItems.size(), items.size()); } } final void addItem(T item) { if (item != null) { this.mItems.add(item); notifyItemChanged(mItems.size()); } } @SuppressWarnings("unused") final List getItems() { return mItems; } final T getItem(int position) { if (position < 0 || position >= mItems.size()) return null; return mItems.get(position); } static abstract class OnClickListener implements View.OnClickListener { @Override public void onClick(View v) { RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder) v.getTag(); onClick(holder.getAdapterPosition(), holder.getItemId()); } public abstract void onClick(int position, long itemId); } interface OnItemClickListener { void onItemClick(int position, long itemId); } }