RecyclerView2

RecyclerView的点击事件
1.声明一个接口,定义响应事件方法
RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件

    public interface OnRVItemClickListener {
    //定义点击事件的回调
    void onItemClick(int pos);
   }

2.在RecycView的Adapter内来维护(声明)一个接口对象
声明一个监听器对象
private OnRVItemClickListener onRVItemClickListener;
提供一个方法,设置监听器
public void setOnRVItemClickListener(OnRVItemClickListener onRVItemClickListener){
this.onRVItemClickListener = onRVItemClickListener;
}
3.在OnBindViewHolder方法中对Item设置点击事件监听,并将事件传递给接口对象
在这里给Item添加响应事件

            holder.itemView.setOnClickListener(new View.OnClickListener() {    
                  public void onClick(View view) {
                    获取点击的位置
                    int pos = holder.getLayoutPosition();
                    传递点击位置
                    onRVItemClickListener.onItemClick(pos);
                }
            });

4.在MainActivity中实现接口,并重写方法,实现内容
给Adapter添加监听器

        adapter.setOnRVItemClickListener(this);

        public void onItemClick(int pos) {

    }

RecyclerView加载不同的Item
1.新建两个布局
2.在当前Activity的布局中添加一个RecyclerView的控件,添加布局管理器
3.新建一个JavaBean的类用来设置数据

 设置数据
    private void createData() {
        mList = new ArrayList<>();
        MyData data1 = new MyData("hey man", R.drawable.c9, 0);
        MyData data2 = new MyData("hey girl", R.drawable.c10, 1);
        mList.add(data1);
        mList.add(data2);
    }
    class MyData {
        String text;
        Integer image;
        标志消息的类型
        int type;
        public MyData(String text, Integer image, int type) {
            this.text = text;
            this.type = type;
            this.image = image;
        }

4.新建一个Adapter的类继承RecyclerView.Adapter
重写Adapter的三个方法
重写getItemViewType的方法,该方法决定了item的类型
创建一个Adapter

    class MyAdapter extends RecyclerView.Adapter {

        方法1public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            RecyclerView.ViewHolder holder = null;
            switch (viewType) {
                case 0:
                    View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0, null);
                    holder = new MyViewHolder0(view);
                  return holder;
                    break;
                case 1:
                    View view1 = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item1, null);
                    holder = new MyViewHolder1(view1);
                return holder1;
                    break;
            }
            return holder;
        }

        ***返回ViewHolder的类型,该方法决定了item的类型***
         决定元素的布局使用哪种类型 
         position 数据源的下标 
         return 一个int型标志,传递给onCreateViewHolder的第二个参数 
        public int getItemViewType(int position) {
            return mList.get(position).type;
        }

        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            获取数据得到类型
            MyData data = mList.get(position);
            int type = data.type;
            switch (type) {
                case 0:
                    MyViewHolder0 holder0 = (MyViewHolder0) holder;
                    holder0.textView.setText(data.text);
                    holder0.imageView0.setImageResource(data.image);
                    break;
                case 1:
                    MyViewHolder1 holder1 = (MyViewHolder1) holder;
                    holder1.textView.setText(data.text);
                    holder1.imageView1.setImageResource(data.image);
                    break;
            }
        }
        public int getItemCount() {
            return mList.size();
        }
    }

5.在Adapter里就需要有两个ViewHolder,
分别声明不同布局Item

     class MyViewHolder0 extends RecyclerView.ViewHolder {

        TextView textView;
        ImageView imageView0;
        第一个ViewHolder
        public MyViewHolder0(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.textView);
            imageView0 = (ImageView) itemView.findViewById(R.id.item0_iv);
        }
    }
     第二个ViewHolder
    class MyViewHolder1 extends RecyclerView.ViewHolder {
        TextView textView;
        ImageView imageView1;

        public MyViewHolder1(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.textView2);
            imageView1 = (ImageView) itemView.findViewById(R.id.item1_iv);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值