关闭

RecyclerView的item点击事件

101人阅读 评论(0) 收藏 举报
分类:

适配器代码:
包含三个部分,一个是ViewHolder类,一个是实现父类的方法。另外一个是点击事件的一些方法和接口。其中一个setOnItemClickListener(OnItemClickListener),把传进来的已经实现的接口赋值给成员变量。ViewHolder实现了OnClickListener,每一个条目点击的时候就调用传过来的接口的onItemClick方法。

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    /*****************************************Adapter方法开始****************************************************/
    private ArrayList<String> data;

    public MyAdapter(ArrayList<String> data) {
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText(data.get(position));
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    /*****************************************Adapter方法结束****************************************************/


    /*****************************************ViewHolder类开始****************************************************/
    public class ViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener {

        public TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.textView);
            textView.setOnClickListener(this);
        }

        // 通过接口回调来实现RecyclerView的点击事件
        @Override
        public void onClick(View v) {
            if (itemClickListener != null) {
                itemClickListener.onItemClick(v, getPosition());
            }
        }
    }
    /*****************************************ViewHolder类结束****************************************************/

    /*****************************************item点击接口开始****************************************************/
    public OnItemClickListener itemClickListener;

    public void setOnItemClickListener(
            OnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }
    /*****************************************item点击接口结束****************************************************/
}

下面是主Activity代码:

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    private ViewOutlineProvider vp;
    private RecyclerView rcv;
    private ArrayList<String> data = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rcv = (RecyclerView) findViewById(R.id.rcv);
        data.add("张三");
        data.add("张三1");
        data.add("张三2");
        data.add("张三3");
        data.add("张三4");
        data.add("张三5");
        data.add("张三6");
        MyAdapter adapter= new MyAdapter(data);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        rcv.setLayoutManager(manager);
        rcv.setAdapter(adapter);
        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, data.get(position), Toast.LENGTH_SHORT).show();
            }![这里写图片描述](http://img.blog.csdn.net/20160830222652434)
        });

    }
}

运行效果如下

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14833次
    • 积分:663
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:10篇
    • 译文:1篇
    • 评论:0条