public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
时间: 2023-05-20 16:02:08 浏览: 157
这是一个关于 Android 开发中 RecyclerView 的方法的问题,它用于创建 ViewHolder 对象。在这个方法中,我们需要传入一个 ViewGroup 对象和一个 viewType 参数,然后返回一个 ViewHolder 对象。具体实现可以根据需求来定制。
相关问题
RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)怎么实现
在onCreateViewHolder方法中,我们需要根据viewType参数来创建不同类型的ViewHolder。一般情况下,我们会在该方法中使用LayoutInflater.from()方法来加载布局文件,然后使用该View对象来实例化ViewHolder。具体的实现步骤如下:
1. 使用LayoutInflater.from()方法加载item布局文件,例如:
```java
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
```
2. 根据viewType参数来创建不同类型的ViewHolder。如果只有一种类型的item布局,可以直接创建一个ViewHolder实例,例如:
```java
MyViewHolder viewHolder = new MyViewHolder(itemView);
```
如果有多种类型的item布局,可以使用switch语句根据viewType参数来创建不同类型的ViewHolder,例如:
```java
switch (viewType) {
case TYPE_A:
viewHolder = new ViewHolderA(itemView);
break;
case TYPE_B:
viewHolder = new ViewHolderB(itemView);
break;
default:
viewHolder = new ViewHolderC(itemView);
break;
}
```
3. 将创建的ViewHolder实例返回,例如:
```java
return viewHolder;
```
完整的onCreateViewHolder方法实现如下:
```java
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 加载item布局文件
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
RecyclerView.ViewHolder viewHolder;
// 根据viewType参数来创建不同类型的ViewHolder
switch (viewType) {
case TYPE_A:
viewHolder = new ViewHolderA(itemView);
break;
case TYPE_B:
viewHolder = new ViewHolderB(itemView);
break;
default:
viewHolder = new ViewHolderC(itemView);
break;
}
// 将创建的ViewHolder实例返回
return viewHolder;
}
```
其中,TYPE_A、TYPE_B、TYPE_C是自定义的常量,用于表示不同类型的item布局。在getItemViewType方法中,需要根据position参数返回对应的viewType类型。
优化这段代码 @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //创建ViewHolder,返回每一项的布局 View inflater = LayoutInflater.from(context).inflate(R.layout.item_dome, parent, false); return new MyViewHolder(inflater); }
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//创建ViewHolder,返回每一项的布局
View inflater = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dome, parent, false);
return new MyViewHolder(inflater);
}
//优化说明:
//1. 使用parent.getContext()代替context,避免空指针异常
//2. 添加NonNull注解,避免空指针异常
//3. 将inflater变量的命名修改为view,更加语义化
阅读全文