看了很多RecyclerView中对item的监听,都很复杂,直到看到了下面这个方法。马上撸起袖子,敲代码,调试,看到成功监听到itme,激动万分。
https://blog.youkuaiyun.com/jwzhangjie/article/details/36868515
再次感谢这篇文章的博主。
监听是使用RecyclerView中ViewHolder的静态抽象类,这个类里面有一个方法getPosition()可以返回当前点击itme的位置
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("test","当前点击的位置:"+getPosition());
}
});
}
}
这是我项目中自定义的适配器
/*自定义适配器*/
class MyAdapter extends RecyclerView.Adapter {
public ArrayList<Person> data;
public MyAdapter(ArrayList<Person> data){/*构造方法*/
this.data=data;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.person_layout,parent,false);
return new MyViewHolder(view);
}
class MyViewHolder extends RecyclerView.ViewHolder{
private ImageView lxrimg;
private TextView lxrname,lxrtel,id;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
lxrimg=itemView.findViewById( R.id.lxrimg);
lxrname=itemView.findViewById( R.id.lxrname);
lxrtel=itemView.findViewById( R.id.lxrtel);
id=itemView.findViewById( R.id.id );
/*item监听事件*/
itemView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Person persons= data.get( getPosition());/*监听当前位置的itmes,并把获取的值赋给Person*/
String tel=persons.getTel();/*获取电话号码*/
/* Log.e("jwzhangjie", "当前点击的位置:"+persons.getTel());*/
Intent i=new Intent();
i.setAction(Intent.ACTION_CALL) ;
i.setData(Uri.parse("tel:"+persons.getTel() ));
startActivity( i );
}
} );
}
}
/*数据回显*/
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewholder, final int i) {
MyViewHolder myViewHolder=(MyViewHolder)viewholder;
Person person=data.get(i);
myViewHolder.id.setText( String.format( Locale.CANADA,"%s",person.getId() ) );
myViewHolder.lxrname.setText( String.format( Locale.CANADA,"%s",person.getName() ) );
/* myViewHolder.lxrimg.setText( String.format( Locale.CANADA,"%s",person.getImgId() ) );*/
myViewHolder.lxrimg.setImageResource(person.getImgId() );
myViewHolder.lxrtel.setText( String.format( Locale.CANADA,"%s",person.getTel() ) );
}
@Override
public int getItemCount() {
return data.size();//data长度
}
}
文章参考:https://blog.youkuaiyun.com/jwzhangjie/article/details/36868515