layoutInflater.inflate(...) 上的 ClassCastException
ClassCastException on layoutInflater.inflate(...)
我一直收到错误消息:
java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.LinearLayout
每当执行以下操作时:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
LinearLayout mLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(mLinearLayout);
}
什么时候没有意义,因为这是我的 xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_text_view"/>
</LinearLayout>
因此XML文件的根应该是LinearLayout,所以inflater应该是returnLinearLayout,从哪里得到FrameLayout?
替换
LinearLayout mLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(mLinearLayout);
由
View view = layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(view);
编辑
ViewHolder
的 public 构造函数需要 View
而不是 LinearLayout
。如果您需要访问此布局的子项,例如 LinearLayout
,您必须从 findViewById 访问它,例如:
您的项目布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/your_linear_layout_id"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_text_view"/>
</LinearLayout>
您的 ViewHolder
public class ExampleViewHolder extends RecyclerView.ViewHolder{
public ExampleViewHolder(View itemView) {
super(itemView);
LinearLayout linearLayout = (LinearLayout) itemView.findViewById(R.id.your_linear_layout_id);
}
}
onCreateViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(view);
}
我一直收到错误消息:
java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.LinearLayout
每当执行以下操作时:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
LinearLayout mLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(mLinearLayout);
}
什么时候没有意义,因为这是我的 xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_text_view"/>
</LinearLayout>
因此XML文件的根应该是LinearLayout,所以inflater应该是returnLinearLayout,从哪里得到FrameLayout?
替换
LinearLayout mLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(mLinearLayout);
由
View view = layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(view);
编辑
ViewHolder
的 public 构造函数需要 View
而不是 LinearLayout
。如果您需要访问此布局的子项,例如 LinearLayout
,您必须从 findViewById 访问它,例如:
您的项目布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/your_linear_layout_id"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_text_view"/>
</LinearLayout>
您的 ViewHolder
public class ExampleViewHolder extends RecyclerView.ViewHolder{
public ExampleViewHolder(View itemView) {
super(itemView);
LinearLayout linearLayout = (LinearLayout) itemView.findViewById(R.id.your_linear_layout_id);
}
}
onCreateViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.item, parent, false);
return new ViewHolder(view);
}