/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.ui;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import java.util.List;
// The listeners passes ViewHolder and item so that it won't be affected by changing position during
// animation.
public abstract class ClickableSimpleAdapter<T, VH extends RecyclerView.ViewHolder>
extends SimpleAdapter<T, VH> {
private OnItemClickListener<T, VH> mOnItemClickListener;
private OnItemLongClickListener<T, VH> mOnItemLongClickListener;
private RecyclerView mRecyclerView;
public ClickableSimpleAdapter() {}
public ClickableSimpleAdapter(List<T> list, OnItemClickListener<T, VH> onItemClickListener,
OnItemLongClickListener<T, VH> onItemLongClickListener) {
super(list);
mOnItemClickListener = onItemClickListener;
mOnItemLongClickListener = onItemLongClickListener;
}
public OnItemClickListener<T, VH> getOnItemClickListener() {
return mOnItemClickListener;
}
public void setOnItemClickListener(OnItemClickListener<T, VH> onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
public OnItemLongClickListener<T, VH> getOnItemLongClickListener() {
return mOnItemLongClickListener;
}
public void setOnItemLongClickListener(OnItemLongClickListener<T, VH> onItemLongClickListener) {
mOnItemLongClickListener = onItemLongClickListener;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mRecyclerView = recyclerView;
}
@Override
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
mRecyclerView = null;
}
// Set listener with position in onBindViewHolder() so we are not affected by merge adapters.
@Override
public void onBindViewHolder(final VH holder, int position, List<Object> payloads) {
super.onBindViewHolder(holder, position, payloads);
final T item = getItem(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(mRecyclerView, item, holder);
}
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
if (mOnItemLongClickListener != null) {
return mOnItemLongClickListener.onItemLongClick(mRecyclerView, item, holder);
}
return false;
}
});
}
public interface OnItemClickListener<T, VH> {
void onItemClick(RecyclerView parent, T item, VH holder);
}
public interface OnItemLongClickListener<T, VH> {
boolean onItemLongClick(RecyclerView parent, T item, VH holder);
}
}