安卓 Recycleview的点击事件

        在为RecycleView设置点击事件时,发现RecycleView没有像ListView那样有setOnItemClickListener的方法,需要自己来实现。在这里我们选择了在绑定数据以后对itemview进行监听,有hoder就可以拿到view了通过这个方法holder.itemView;

 View view=holder.itemView;
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context,list.get(position).getSongname(),Toast.LENGTH_LONG).show();

            manager.cutmusic(list.get(position).getUrl());

            if(listen!=null) {
                listen.onitemclick(v, position);
            }
        }
    });

二.但是在适配器里面设置监听不太合适,所以我们最好还是在fragment来写监听,所以第二种方法我们写了一个回调:回调有三个条件1.两个类2.有主仆关系3.不确定操作。

首先在fragment中只需要传递一个接口,同时在辅类需要定义一个接口,接口里面有一个方法,和一个方法。


public  interface Onitemlisten
{
    void onitemclick(View view, int position);
}
Onitemlisten listen;
public void SetOnItemclick(Onitemlisten listen)
{
     this.listen=listen;
}
2.在什么时候触发呢?我选择子条目被点击以后触发它。

  View view=holder.itemView;
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context,list.get(position).getSongname(),Toast.LENGTH_LONG).show();

            manager.cutmusic(list.get(position).getUrl());

            if(listen!=null) {
                listen.onitemclick(v, position);
            }
        }
    });
3,在fragemnt中的代码,在这里接收通知。

  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        view = inflater.inflate(R.layout.layout_0, container, false);


        mrycleview=view.findViewById(R.id.Retorylistview);

        rec=new recycleadapter();
        activty= (PlayerActivity) getActivity();
        Log.e("msg","44444444444444444444444");
        rec.SetOnItemclick(new recycleadapter.Onitemlisten() {
            @Override
            public void onitemclick(View view, int position) {
                Toast.makeText(view.getContext(), list1.get(position).getUrl()+"", Toast.LENGTH_SHORT).show();
                activty.setpaly();
            }
        });
        mrycleview.setAdapter(rec);

        query();
        click();



        return view;

    }

4.点谁删谁。如何做呢?在适配器中再写一个方法delete,因为数据就是,同时记住刷新数据,添加动画默认的

//        mrycleview.setItemAnimator(new DefaultItemAnimator());

public void delete(int position)
{    list.remove(position);
//添加一个移除动画
    notifyItemRemoved(position);
//刷新数据
    notifyDataSetChanged()
}



//第二个方法完整的代码

@Override

public void onBindViewHolder(RecyclerView.ViewHolder fatherholder, final int position)
{
    Log.e("msg","111111111111111111");
    if(fatherholder instanceof ViewHolder)
    {
        Log.e("msg","88888888888888888888888888888888888");
    ViewHolder holder=(ViewHolder)fatherholder;
    holder.tv1.setText(list.get(position).getSongname());
    holder.tv2.setText(list.get(position).getSingername());
    Picasso.with(context)
            .load(list.get(position).getAlbumpic_big())
            .error(R.mipmap.ic_launcher)
            .placeholder(R.drawable.dibu8)
            .into(holder.IV);

    View view=holder.itemView;
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context,list.get(position).getSongname(),Toast.LENGTH_LONG).show();

            manager.cutmusic(list.get(position).getUrl());

            if(listen!=null) {
                listen.onitemclick(v, position);
            }
        }
    });
}if(fatherholder instanceof ViewHolder2)
    {
        ViewHolder2 holder=(ViewHolder2)fatherholder;
        Picasso.with(context)
                .load(list.get(position).getAlbumpic_big())
                .error(R.mipmap.ic_launcher)
                .placeholder(R.drawable.dibu8)
                .into(holder.IV1);
        Log.e("msg","9999999999999999999999999999999999999");
    }
      Log.e("msg","22222222222222222222");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值