RecyclerView的Itme多布局与Itme的点击事件

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:
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();                
          }
        }));

b.在Adapter类中写监听接口,通过View.OnClickListener写监听事件
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();
    }
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值