Android报错:java.lang.IllegalStateException: ViewHolder views must not be attached when created.
这个错误很奇怪,先记录下来,
错误信息如下,
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.spacesoftwares.myapplication3, PID: 11575
java.lang.IllegalStateException: ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the attachToRoot parameter of LayoutInflater.inflate(..., boolean attachToRoot)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6687)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5869)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3225)
解决方案在stackoverflow上面【1】,毕竟我的源码和人家源码不一样,我贴出来,全文如下,
package com.spacesoftwares.myapplication3.MyRecyclerView;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.spacesoftwares.myapplication3.R;
import org.w3c.dom.Text;
import java.util.List;
public class LinearAdaptor extends RecyclerView.Adapter<LinearAdaptor.LinearViewHolder> {
private Context mContext;
public LinearAdaptor(Context context){
this.mContext = context;
}
@NonNull
@Override
public LinearAdaptor.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item, parent));
View view = LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item, parent, false);
return new LinearViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull LinearAdaptor.LinearViewHolder holder, int position) {
holder.textView.setText("LinearViewHolder");
}
@Override
public int getItemCount() {
return 20;
}
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public LinearViewHolder(View itemView){
super(itemView);
textView = itemView.findViewById(R.id.li_title);
}
}
}
报错的部分在这里,
//return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item, parent));
我改写成下面的形式,就没有报错了,主要是inflate后面加了一个false,如下
View view = LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item, parent, false);
return new LinearViewHolder(view);