java - 适配器类错误。创建时不得附加 ViewHolder 视图
问题描述
我的代码有问题,我在一个 recyclerview 中创建了两个适配器。我把它们都放在一个类中,我需要这个适配器根据某些情况返回一个 Viewholder。
这是我的适配器代码:
public class CurrentUserTaskListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public List<Task> taskList;
private static final int ITEM_TYPE_PUBLISHED_TASK = 1;
private static final int ITEM_TYPE_ASSIGNED_TASK = 2;
public CurrentUserTaskListAdapter(List<Task> taskList) {
this.taskList = taskList;
}
public class AssignedTaskViewHolder extends RecyclerView.ViewHolder {
View mView;
public TextView tvTagAndDate;
public TextView tvStatus;
public AssignedTaskViewHolder(View itemView) {
super(itemView);
mView = itemView;
tvTagAndDate = itemView.findViewById(R.id.tvTagAndDate);
tvStatus = itemView.findViewById(R.id.tvStatus);
}
}
public class PublishedTaskViewHolder extends RecyclerView.ViewHolder {
View mView;
public TextView tvTagAndDate;
public TextView tvStatus;
public PublishedTaskViewHolder(View itemView) {
super(itemView);
mView = itemView;
tvTagAndDate = itemView.findViewById(R.id.tvTagAndDate);
tvStatus = itemView.findViewById(R.id.tvStatus);
}
}
@Override
public int getItemViewType(int position) {
if (taskList.get(position).getAssignedTo() == null)
return ITEM_TYPE_PUBLISHED_TASK;
else
return ITEM_TYPE_ASSIGNED_TASK;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
if(i == ITEM_TYPE_ASSIGNED_TASK){
layoutInflater.inflate(R.layout.layout_curent_user_assigned_tasks_item, viewGroup, false);
return new AssignedTaskViewHolder(viewGroup);
}
else if (i == ITEM_TYPE_PUBLISHED_TASK){
layoutInflater.inflate(R.layout.layout_current_user_pending_tasks, viewGroup, false);
return new PublishedTaskViewHolder(viewGroup);
}
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if(viewHolder instanceof AssignedTaskViewHolder){
final AssignedTaskViewHolder assignedTaskViewHolder = (AssignedTaskViewHolder) viewHolder;
}
else if (viewHolder instanceof PublishedTaskViewHolder) {
final PublishedTaskViewHolder publishedTaskViewHolder = (PublishedTaskViewHolder) viewHolder;
}
}
@Override
public int getItemCount() {
return taskList.size();
}}
我遇到的问题是我收到此错误:
java.lang.IllegalStateException:创建时不得附加 ViewHolder 视图。确保您没有将“true”传递给 android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6796) 的 LayoutInflater.inflate(..., boolean attachToRoot) 的 attachToRoot 参数。 .v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)....等等
在 getItemViewType 方法中,我验证列表中的对象是哪个类型。
解决方案
修复这部分,例如:
if (i == ITEM_TYPE_ASSIGNED_TASK) {
View view = layoutInflater.inflate(R.layout.layout_curent_user_assigned_tasks_item, viewGroup, false);
return new AssignedTaskViewHolder(view);
} else if (i == ITEM_TYPE_PUBLISHED_TASK) {
View view = layoutInflater.inflate(R.layout.layout_current_user_pending_tasks, viewGroup, false);
return new PublishedTaskViewHolder(view);
}
问题是您正在传递 ViewHolder 的项目布局应该位于的父布局。祝你好运!
推荐阅读
- c++ - #foo:Qt 中的主动替代
- mysql - 我需要在代码中添加什么来更改日期格式
- java - 使用 Spring Boot 和 Hibernate 在 2 个微服务中建立多对多关系的问题
- sql - 有没有办法在没有 case 语句的情况下运行?
- angular - 行为主体在不同的方法上给出不同的值,返回 null 直到页面刷新
- javascript - 如何一次只显示一个可折叠元素?
- python - 直接发送整个字符串和逐个字符发送有什么区别?
- saml-2.0 - 在远程服务提供商上导入 XML 文件时出错:Forgerock AM 7.1.0
- java - 将文本添加到图像并使其适合 Java 中的矩形区域
- python - 尝试运行 pyspark Mac