package info.papdt.express.helper.ui.common;
import android.content.Context;
import android.os.Handler;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import info.papdt.express.helper.R;
public abstract class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ClickableViewHolder> {
private int lastPosition = -1;
private boolean firstLoad = true;
private Context context;
private boolean useAnimation;
public MyRecyclerViewAdapter(boolean useAnimation) {
this.useAnimation = useAnimation;
}
public interface OnItemClickListener {
public void onItemClicked(int position);
}
public interface OnItemLongClickListener {
public boolean onItemLongClicked(int position);
}
private OnItemClickListener itemClickListener;
private OnItemLongClickListener itemLongClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.itemClickListener = listener;
}
public void setOnItemLongClickListener(OnItemLongClickListener listener) {
this.itemLongClickListener = listener;
}
public void bindContext(Context context) {
this.context = context;
}
public Context getContext() {
return this.context;
}
@Override
public void onBindViewHolder(ClickableViewHolder holder, final int position) {
holder.getParentView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (itemClickListener != null) {
itemClickListener.onItemClicked(position);
}
}
});
holder.getParentView().setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (itemLongClickListener != null) {
return itemLongClickListener.onItemLongClicked(position);
} else {
return false;
}
}
});
if (useAnimation) setAnimation(holder.parentView, position);
}
private void setAnimation(final View viewToAnimate, final int position) {
// If the bound view wasn't previously displayed on screen, it's animated
if (position > lastPosition) {
if (firstLoad) {
viewToAnimate.setAlpha(0f);
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
Animation animation = AnimationUtils.loadAnimation(
context,
R.anim.card_slide_in
);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
viewToAnimate.setAlpha(1f);
firstLoad = true;
}
@Override
public void onAnimationEnd(Animation animation) {
firstLoad = false;
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
animation.setFillAfter(true);
viewToAnimate.startAnimation(animation);
}
}
, position * 180);
} else {
Animation animation = AnimationUtils.loadAnimation(context, R.anim.card_slide_in);
viewToAnimate.startAnimation(animation);
}
lastPosition = position;
}
}
public class ClickableViewHolder extends RecyclerView.ViewHolder {
private View parentView;
public ClickableViewHolder(View itemView) {
super(itemView);
this.parentView = itemView;
}
public View getParentView() {
return parentView;
}
}
}