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