安卓 Recycleview的点击事件

来源:互联网 发布:美工废物利用教案 编辑:程序博客网 时间:2024/06/04 17:50

        在为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");}

原创粉丝点击