recyclerview之item点击事件监听

本文介绍了如何在RecyclerView中实现Item的点击事件监听。通过在适配器中设置接口,详细展示了实现点击事件的具体代码和步骤。

用过recyclerview的朋友们都知道,recyclerview不负责item视图的布局以及显示,所以也就没有为item开发点击事件,那么当我们需要对recyclerview的item做点击事件的时候,就只能自己来实现了,我主要是在recyclerview的适配器中设置接口,来实现recyclerview的点击监听,这里我是零时做了一个简单的demo,下面请看代码:

adapter中代码:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ItemViewHolder>{
//点击
    private OnItemClickListener mOnItemClickListener;
    //长按
    private OnItemLongClickListener mOnItemLongClickListener;
//点击
    public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) {
        this.mOnItemClickListener = mOnItemClickListener;
    }
//长按
    public void setmOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
        this.mOnItemLongClickListener = mOnItemLongClickListener;
    }
    private Context context;
    private List<DetailsBean.ResultBean.DataBean> list;
    public MyAdapter(Context context, List<DetailsBean.ResultBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }
    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        ItemViewHolder itemViewHolder=new ItemViewHolder(inflate);
        return itemViewHolder;
    }
    @Override
    public void onBindViewHolder(final ItemViewHolder holder, int position) {
        holder.tv.setText(list.get(position).getContent());
        holder.content.setText(list.get(position).getUpdatetime());
        //判断是否设置了监听器
        //单击判断
        if(mOnItemClickListener != null){
            //为ItemView设置监听器
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = holder.getLayoutPosition(); // 1
                    mOnItemClickListener.onItemClick(holder.itemView,position); // 2
                }
            });
        }
        //长按判断
        if(mOnItemLongClickListener != null){
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    int position = holder.getLayoutPosition();
                    mOnItemLongClickListener.onItemLongClick(holder.itemView,position);
                    //返回true 表示消耗了事件 事件不会继续传递
                    return true;
                }
            });
        }
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
    public class ItemViewHolder extends RecyclerView.ViewHolder{
        private final TextView tv;
        private TextView content;
        public ItemViewHolder(View itemView) {
            super(itemView);
            tv=  (TextView) itemView.findViewById(R.id.tttttt);
            content= (TextView) itemView.findViewById(R.id.content);
        }
    }
//点击监听接口
    public interface OnItemClickListener{
        void onItemClick(View view, int position);
    }
//长按监听接口
    public interface OnItemLongClickListener{
        void onItemLongClick(View view, int position);
    }
}

activity:
public class MainActivity extends AppCompatActivity {
    private PullRecyclerView recycler;
    private MyAdapter adapter;
    private List<DetailsBean.ResultBean.DataBean> list;
    private List<DetailsBean.ResultBean.DataBean> data=new ArrayList<>();
    private int urlPage=2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        recycler= (PullRecyclerView) findViewById(R.id.recycler);
        //垂直排列(不设置这个属性,有时会不显示数据)
        recycler.setOrientation(LinearLayout.VERTICAL);
        /*
        * 布局管理器
        * LinearLayoutManager(listview展现形式)
        * GridLayoutManager(gridview展现形式)
        * StaggeredGridLayoutManager(瀑布流展现形式)
        * */
        recycler.setLayoutManager(new LinearLayoutManager(this));
        
        //网络请求数据
        initData(urlPage);
    }
    private void initData(int page) {
        //封装的okhttp工具类的get异步
        OkHttp.getAsync("http://japi.juhe.cn/joke/content/list.from?key= 874ed931559ba07aade103eee279bb37 &page="+page+"&pagesize=10&sort=asc&time=1418745237", new OkHttp.DataCallBack() {
            //请求失败所做处理(工具类已处理)
            @Override
            public void requestFailure(Request request, IOException e) {
            }
            //请求成功所做处理
            @Override
            public void requestSuccess(String result) throws Exception {
                //解析数据
                jieJson(result);
            }
        });
    }
    private void jieJson(String res) {
        //创建一个Gson对象
        Gson gson=new Gson();
        //进行解析并放入Bean中
         DetailsBean bean=gson.fromJson(res,DetailsBean.class);
        //放入集合
        list=bean.getResult().getData();
        data.addAll(list);
        //配置适配器
        adapter = new MyAdapter(MainActivity.this,data);
        recycler.setAdapter(adapter);
        //长按监听
        adapter.setmOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
            @Override
            public void onItemLongClick(View view, final int position) {
                //定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setMessage("确定删除?");
                builder.setTitle("提示");
                //添加AlertDialog.Builder对象的setPositiveButton()方法
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        adapter.notifyDataSetChanged();
                        data.remove(position);
                        Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show();
                    }
                });
                //添加AlertDialog.Builder对象的setNegativeButton()方法
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                //Dialog 显示
                builder.create().show();
            }
        });
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值