150 lines
4.7 KiB
Java
150 lines
4.7 KiB
Java
|
package com.example.nanchen.aiyaschoolpush.adapter;
|
|||
|
|
|||
|
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.List;
|
|||
|
|
|||
|
/**
|
|||
|
* @author nanchen
|
|||
|
* @fileName ischool
|
|||
|
* @packageName com.idtechinfo.shouxiner.adapter.common
|
|||
|
* @date 2016/09/02 15:47
|
|||
|
*/
|
|||
|
public abstract class CommonRecyclerAdapter<T> extends RecyclerView.Adapter<CommonRecyclerHolder> {
|
|||
|
private Context context;//上下文
|
|||
|
private List<T> list;//数据源
|
|||
|
private LayoutInflater inflater;//布局器
|
|||
|
private int itemLayoutId;//布局id
|
|||
|
private boolean isScrolling;//是否在滚动
|
|||
|
private OnItemClickListener listener;//点击事件监听器
|
|||
|
private OnItemLongClickListener longClickListener;//长按监听器
|
|||
|
private RecyclerView recyclerView;
|
|||
|
|
|||
|
//在RecyclerView提供数据的时候调用
|
|||
|
@Override
|
|||
|
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
|
|||
|
super.onAttachedToRecyclerView(recyclerView);
|
|||
|
this.recyclerView = recyclerView;
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
|
|||
|
super.onDetachedFromRecyclerView(recyclerView);
|
|||
|
this.recyclerView = null;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 定义一个点击事件接口回调
|
|||
|
*/
|
|||
|
public interface OnItemClickListener {
|
|||
|
void onItemClick(RecyclerView parent, View view, int position);
|
|||
|
}
|
|||
|
|
|||
|
public interface OnItemLongClickListener {
|
|||
|
boolean onItemLongClick(RecyclerView parent, View view, int position);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 插入一项
|
|||
|
*
|
|||
|
* @param item
|
|||
|
* @param position
|
|||
|
*/
|
|||
|
public void insert(T item, int position) {
|
|||
|
list.add(position, item);
|
|||
|
notifyItemInserted(position);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 删除一项
|
|||
|
*
|
|||
|
* @param position 删除位置
|
|||
|
*/
|
|||
|
public void delete(int position) {
|
|||
|
list.remove(position);
|
|||
|
notifyItemRemoved(position);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public CommonRecyclerAdapter(Context context, List<T> list, int itemLayoutId) {
|
|||
|
this.context = context;
|
|||
|
this.list = list;
|
|||
|
this.itemLayoutId = itemLayoutId;
|
|||
|
inflater = LayoutInflater.from(context);
|
|||
|
|
|||
|
// recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
|||
|
// @Override
|
|||
|
// public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
|||
|
// super.onScrollStateChanged(recyclerView, newState);
|
|||
|
// isScrolling = !(newState == RecyclerView.SCROLL_STATE_IDLE);
|
|||
|
// if (!isScrolling) {
|
|||
|
// notifyDataSetChanged();
|
|||
|
// }
|
|||
|
// }
|
|||
|
// });
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public CommonRecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|||
|
View view = inflater.inflate(itemLayoutId, parent, false);
|
|||
|
return CommonRecyclerHolder.getRecyclerHolder(context, view);
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void onBindViewHolder(final CommonRecyclerHolder holder, int position) {
|
|||
|
|
|||
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
|||
|
@Override
|
|||
|
public void onClick(View view) {
|
|||
|
if (listener != null && view != null && recyclerView != null) {
|
|||
|
int position = recyclerView.getChildAdapterPosition(view);
|
|||
|
listener.onItemClick(recyclerView, view, position);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
|||
|
@Override
|
|||
|
public boolean onLongClick(View view) {
|
|||
|
if (longClickListener != null && view != null && recyclerView != null) {
|
|||
|
int position = recyclerView.getChildAdapterPosition(view);
|
|||
|
longClickListener.onItemLongClick(recyclerView, view, position);
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
convert(holder, list.get(position), position, isScrolling);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public int getItemCount() {
|
|||
|
return list == null ? 0 : list.size();
|
|||
|
}
|
|||
|
|
|||
|
public void setOnItemClickListener(OnItemClickListener listener) {
|
|||
|
this.listener = listener;
|
|||
|
}
|
|||
|
|
|||
|
public void setOnItemLongClickListener(OnItemLongClickListener longClickListener) {
|
|||
|
this.longClickListener = longClickListener;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 填充RecyclerView适配器的方法,子类需要重写
|
|||
|
*
|
|||
|
* @param holder ViewHolder
|
|||
|
* @param item 子项
|
|||
|
* @param position 位置
|
|||
|
* @param isScrolling 是否在滑动
|
|||
|
*/
|
|||
|
public abstract void convert(CommonRecyclerHolder holder, T item, int position, boolean isScrolling);
|
|||
|
}
|