package org.cuieney.videolife.common.base;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.jakewharton.rxbinding.view.RxView;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.TimeUnit;
import rx.functions.Action1;
/**
* Created by cuieney on 16/4/7.
*
*/
public abstract class BaseAdapter<T> extends android.widget.BaseAdapter {
public List<T> list;
public Context context;
public LayoutInflater inflater;
public OnItemLongClickListener onItemLongClickListener;
private OnItemClickListener onItemClickListener;
public boolean isShake;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
this.onItemLongClickListener = onItemLongClickListener;
}
public void setLongClickShake(boolean isShake){
this.isShake = isShake;
}
public interface OnItemLongClickListener{
void onItemLongClick(int position);
}
public interface OnItemClickListener{
void onItemClick(Object t);
}
public BaseAdapter(List<T> list, Context context) {
this.context = context;
this.list = new ArrayList<T>();
this.addAll(list);
inflater = inflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
public void addAll(Collection<? extends T> collection) {
addAll(list.size(), collection);
}
public void addAll(int position, Collection<? extends T> collection) {
list.addAll(position, collection);
notifyDataSetChanged();
}
public void clear() {
list.clear();
notifyDataSetChanged();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = getViewContainer(position, convertView, parent);
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (onItemLongClickListener != null) {
onItemLongClickListener.onItemLongClick(position);
}
return isShake;
}
});
RxView.clicks(convertView)
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(list.get(position));
}
}
});
return convertView;
}
protected abstract View getViewContainer(int position, View convertView, ViewGroup parent);
}