第一种在adapter中添加listenner实现
listenner接口
public interface OnclickRecycle {
void Onclick(View view, String data);
}
一:在onCreateViewHolder添加监听,但是这种方法没法传递position,getposition()方法应该是过时了。
public class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.MyViewHolder> implements View.OnClickListener{
private OnclickRecycle onclickRecycle=null;
private Context context;
private List<String> mDatas;
public LinearAdapter(Context context){
this.context=context;
}
public OnclickRecycle getOnclickRecycle() {
return onclickRecycle;
}
public void setOnclickRecycle(OnclickRecycle onclickRecycle) {
this.onclickRecycle = onclickRecycle;
}
public List<String> getmDatas() {
return mDatas;
}
public void setmDatas(List<String> mDatas) {
this.mDatas = mDatas;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(
context).inflate(R.layout.item_home, parent,
false);
LinearAdapter.MyViewHolder holder = new LinearAdapter.MyViewHolder(v);
v.setOnClickListener(this);
//给这个View添加监听
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(mDatas.get(position));
holder.itemView.setTag(mDatas.get(position));
}
@Override
public int getItemCount() {
return mDatas.size();
}
@Override
public void onClick(View v) {
if(onclickRecycle!=null){
onclickRecycle.Onclick(v,(String)v.getTag());
}
}
static class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
}
}
}
二:在onBindViewHolder中实现
public class LinearAdapter2 extends RecyclerView.Adapter<LinearAdapter2.MyViewHolder> {
public OnclickRecycle onclickRecycle=null;
private Context context;
private List<String> mDatas;
public LinearAdapter2(Context context){
this.context=context;
}
public OnclickRecycle getOnclickRecycle() {
return onclickRecycle;
}
public void setOnclickRecycle(OnclickRecycle onclickRecycle) {
this.onclickRecycle = onclickRecycle;
}
public List<String> getmDatas() {
return mDatas;
}
public void setmDatas(List<String> mDatas) {
this.mDatas = mDatas;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(
context).inflate(R.layout.item_home, parent,
false);
LinearAdapter2.MyViewHolder holder = new LinearAdapter2.MyViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.tv.setText(mDatas.get(position));
holder.itemView.setTag(mDatas.get(position));
holder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getOnclickRecycle()!=null){
getOnclickRecycle().Onclick(holder.tv,position+"");
}
}
});
}
@Override
public int getItemCount() {
return mDatas.size();
}
static class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
}
}
}