1.和listView的不同,需要添加一个自己的布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recylerView.setLayoutManager(layoutManager);
2.重写adapter类,并实现点击功能,这是重点:
//新建一个adapter,继承RecyclerView.Adapter,并并指定自定义的ViewHolder泛型
public class FruitAdapter2 extends RecyclerView.Adapter<FruitAdapter2.ViewHolder>{
private Fruit[] data;
//新建一个ViewHolder,继承RecyclerView.ViewHolder,viewHolder里放着每一item的布局
static class ViewHolder extends RecyclerView.ViewHolder{
View friutview;//每一item的布局
TextView fruit_name;
ImageView friut_image;//布局里的TextViewde的控件
public ViewHolder(@NonNull View itemView) {
super(itemView);//item的布局
friutview = itemView;
fruit_name = itemView.findViewById(R.id.fruit_name);
friut_image = itemView.findViewById(R.id.fruit_image);//实例控件
}
}
public FruitAdapter2(Fruit[] data) {
this.data = data;//构造方法获得数据
}
//创建ViewHolder
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//找到item得布局
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout2, null);
final ViewHolder holder = new ViewHolder(view);
//点击整个item的布局会调用此方法
holder.friutview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();//是adapter的position
Log.e("sss", position+"" );
Fruit item = data[position];
Toast.makeText(v.getContext(), "click view "+item.getName(), Toast.LENGTH_SHORT).show();
}
});
//对图片的点击事件
holder.friut_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
Log.e("sss", "文字---"+position );
Fruit datum = data[position];
Toast.makeText(v.getContext(), "click image"+datum.getName(), Toast.LENGTH_SHORT).show();
}
});
//如果点击文字,就会实现触发friutview的事件处理
return holder;
}
//对每一个item的数据进行赋值
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Fruit datum = data[position];
holder.friut_image.setImageResource(datum.getImageId());
holder.fruit_name.setText(datum.getName());
}
@Override
public int getItemCount() {
return data.length;
}
}