1.RecyclerView的Itme多布局
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ private List<String> list; private Context context; private int typecount=2; private LayoutInflater mLayoutInflater; public MyAdapter(Context con,List<String> li){ list=li; context=con; mLayoutInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // if(viewType==1){ // return new ItmeType1(mLayoutInflater.inflate(R.layout.itme1,parent,false)); // }else { // return new ItmeType2(mLayoutInflater.inflate(R.layout.itme2,parent,false)); // } RecyclerView.ViewHolder viewholder = null; switch (viewType){ case 1: viewholder=new ItmeType1(LayoutInflater.from(context).inflate(R.layout.itme1,parent,false)); break; case 2: viewholder=new ItmeType2(LayoutInflater.from(context).inflate(R.layout.itme2,parent,false)); break; } return viewholder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof ItmeType1){ ((ItmeType1) holder).tv1.setText(list.get(position)); }else if(holder instanceof ItmeType2){ ((ItmeType2) holder).tv2.setText(list.get(position)); } } @Override public int getItemCount() { return list.size(); } @Override public int getItemViewType(int position) { return position % 2 == 0 ? 1:2; } public class ItmeType1 extends RecyclerView.ViewHolder{ TextView tv1; public ItmeType1(View itemView) { super(itemView); tv1=(TextView) itemView.findViewById(R.id.tv1_itme); } } public class ItmeType2 extends RecyclerView.ViewHolder{ TextView tv2; public ItmeType2(View itemView) { super(itemView); tv2=(TextView)itemView.findViewById(R.id.tv2_itme); } } }
2.RecyclerView的Itme点击事件
a.通过recyclerView.addOnItemTouchListener()方法
tip one:
public class ItmeClickListener extends RecyclerView.SimpleOnItemTouchListener{ private OnItmeClickListener monitmeclicklistener; private RecyclerView recyclerView; private GestureDetectorCompat gestureDetectorCompat; //手势回调类public interface OnItmeClickListener{ public void ItmeClick(View view,int postion); //itme点击事件 public void ItmeLongClick(View view,int postion); //itme长按事件 } public ItmeClickListener(final RecyclerView recyclerView, final OnItmeClickListener onItmeClickListener){ this.recyclerView=recyclerView; this.monitmeclicklistener=onItmeClickListener; gestureDetectorCompat=new GestureDetectorCompat(recyclerView.getContext(),new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onSingleTapUp(MotionEvent e) { View view=recyclerView.findChildViewUnder(e.getX(),e.getY()); if(view!=null&&monitmeclicklistener!=null){ monitmeclicklistener.ItmeClick(view,recyclerView.getChildAdapterPosition(view)); } return true; } @Override public void onLongPress(MotionEvent e) { View view=recyclerView.findChildViewUnder(e.getX(),e.getY()); if(view!=null&&monitmeclicklistener!=null){ monitmeclicklistener.ItmeLongClick(view,recyclerView.getChildAdapterPosition(view)); } } }); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { gestureDetectorCompat.onTouchEvent(e); return false; } } tip two:b.在Adapter类中写监听接口,通过View.OnClickListener写监听事件recyclerView.addOnItemTouchListener(new ItmeClickListener(recyclerView, new ItmeClickListener.OnItmeClickListener() { @Override public void ItmeClick(View view, int postion) { TextView tv=(TextView) view.findViewById(R.id.tv1_itme); Toast.makeText(MainActivity.this,"点击aa:"+postion+" / "+tv.getText(),Toast.LENGTH_SHORT).show(); } @Override public void ItmeLongClick(View view, int postion) { TextView tv=(TextView) view.findViewById(R.id.tv2_itme); Toast.makeText(MainActivity.this,"长按bb:"+postion+" / "+tv.getText(),Toast.LENGTH_SHORT).show(); } }));
tip one:
public class OtherAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private String[] strings; private MyItmeClickListener myItmeClickListener; public OtherAdapter(Context context, String[] strings){ this.context=context; this.strings=strings; } public interface MyItmeClickListener{ public void myTvClick(View view,int postion); public void myTvandCbClick(View view,int postion); } public void setItmeClickListeber(MyItmeClickListener myItmeClickListener ){ this.myItmeClickListener=myItmeClickListener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==1){ View view= LayoutInflater.from(context).inflate(R.layout.other_itme1,parent,false); return new TvViewHolder(view); }else { View view=LayoutInflater.from(context).inflate(R.layout.other_itme2,parent,false); return new TvandCbViewHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof TvViewHolder){ ((TvViewHolder) holder).tv.setText(strings[position]+"one"); }else if(holder instanceof TvandCbViewHolder) { ((TvandCbViewHolder) holder).tv.setText(strings[position]+"two"); } } @Override public int getItemCount() { return strings.length; } @Override public int getItemViewType(int position) { return (position)%2==0?1:2; } public class TvViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView tv; public TvViewHolder(View itemView) { super(itemView); tv=(TextView) itemView.findViewById(R.id.other_itme1_tv); tv.setOnClickListener(this); } @Override public void onClick(View v) { if(myItmeClickListener!=null){ myItmeClickListener.myTvClick(itemView,getAdapterPosition()); } } } public class TvandCbViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{ TextView tv; CheckBox cb; public TvandCbViewHolder(View itemView) { super(itemView); tv=(TextView) itemView.findViewById(R.id.other_itme2_tv); cb=(CheckBox)itemView.findViewById(R.id.otner_itme2_cb); tv.setOnClickListener(this); tv.setOnLongClickListener(this); } @Override public void onClick(View v) { if(myItmeClickListener!=null){ myItmeClickListener.myTvandCbClick(itemView,getAdapterPosition()); } } @Override public boolean onLongClick(View v) { if(myItmeClickListener!=null){ myItmeClickListener.myTvandCbClick(itemView,getAdapterPosition()); } return true; } } }tip two:
在Activity中调用adapter.setItmeClickListeber(new OtherAdapter.MyItmeClickListener() { @Override public void myTvClick(View view, int postion) { TextView tv=(TextView) view.findViewById(R.id.other_itme1_tv); Toast.makeText(OtherClickActivity.this,"纯文本布局:"+tv.getText()+"num:"+postion,Toast.LENGTH_SHORT).show(); } @Override public void myTvandCbClick(View view, int postion) { TextView textView=(TextView) view.findViewById(R.id.other_itme2_tv); Toast.makeText(OtherClickActivity.this,"文本加复选框布局:"+textView.getText()+"num:"+postion,Toast.LENGTH_SHORT).show(); } });