Java 适配器类出错。创建时不得附着ViewHolder视图

Java 适配器类出错。创建时不得附着ViewHolder视图,java,android,android-adapter,android-viewholder,Java,Android,Android Adapter,Android Viewholder,我的代码有问题,我在一个recyclerview中创建了两个适配器。我把它们都放在一个类中,我需要这个适配器根据某些情况返回一个Viewholder 以下是我的适配器代码: public class CurrentUserTaskListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public List<Task> taskList; private static final int I

我的代码有问题,我在一个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();
}}
公共类CurrentUserTaskListAdapter扩展了RecyclerView.Adapter{
公开名单任务清单;
私有静态最终整数项\类型\发布\任务=1;
私有静态最终整数项\u类型\u分配的\u任务=2;
public CurrentUserTaskListAdapter(列表任务列表){
this.taskList=任务列表;
}
指定的公共类taskviewholder扩展了RecyclerView.ViewHolder{
视图视图;
公共文本视图tvTagAndDate;
公共文本视图状态;
公共分配的taskviewholder(视图项视图){
超级(项目视图);
mView=项目视图;
tvTagAndDate=itemView.findViewById(R.id.tvTagAndDate);
tvStatus=itemView.findViewById(R.id.tvStatus);
}
}
public类PublishedTaskViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共文本视图tvTagAndDate;
公共文本视图状态;
公共发布的taskviewholder(视图项视图){
超级(项目视图);
mView=项目视图;
tvTagAndDate=itemView.findViewById(R.id.tvTagAndDate);
tvStatus=itemView.findViewById(R.id.tvStatus);
}
}
@凌驾
public int getItemViewType(int位置){
if(taskList.get(position).getAssignedTo()==null)
返回项目类型发布任务;
其他的
返回项目\类型\分配的\任务;
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
LayoutInflater LayoutInflater=LayoutInflater.from(viewGroup.getContext());
if(i==项目类型分配任务){
LayoutFlater.充气(R.layout.layout\u Current\u user\u assigned\u tasks\u item,viewGroup,false);
返回新分配的taskviewholder(视图组);
}
else if(i==项目类型发布任务){
LayoutFlater.充气(R.layout.layout\u当前用户\u挂起的任务,视图组,false);
返回新发布的taskviewholder(视图组);
}
返回null;
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder ViewHolder,int i){
if(分配的TaskViewHolder的viewHolder实例){
最终分配的taskviewholder AssignedTaskViewHolder=(AssignedTaskViewHolder)视图持有者;
}
else if(PublishedTaskViewHolder的视图持有者实例){
最终PublishedTaskViewHolder PublishedTaskViewHolder=(PublishedTaskViewHolder)视图持有者;
}
}
@凌驾
public int getItemCount(){
返回taskList.size();
}}
我遇到的问题是,我遇到了以下错误:

java.lang.IllegalStateException:创建ViewHolder视图时不得附加视图。确保未将“true”传递给LayoutInflater.inflate的attachToRoot参数(…,布尔attachToRoot) 位于android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6796) 在android.support.v7.widget.RecyclerView$Recycler.TryGetViewHolderFormationByDaildate(RecyclerView.java:5975)上 在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的项目布局应该位于的父布局。
祝你好运

谢谢大家!!那是我的问题。但是你知道我用onBindViewHolder方法做什么吗?没问题。请将问题标记为已回答。在BindViewHolder上,您应该传递一些数据,这些数据应该显示在列表的单个项目中。这里的更多信息我如何在AssignedTaskViewHolder中获取我的元素在列表中的位置?在onBindViewHolder方法中,位置是“int i”。在ViewHolder中,它本身就是getPosition()