FirebaseRecyclerViewAdapter 投射错误
Cast Error with FirebaseRecyclerViewAdapter
所以我有一个要用 FirebaseRecyclerViewAdapter 填充的 RecycleView。
我正在关注这个例子:https://github.com/firebase/firebaseui-android#using-a-recyclerview
不过我遇到了一个奇怪的错误:
java.lang.ClassCastException:
android.support.v7.widget.AppCompatTextView cannot be cast to
android.view.ViewGroup
这是我在 onCreateView 中的内容:
RecyclerView recycler = (RecyclerView) mView.findViewById(R.id.rvTasks);
recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
FirebaseRecyclerViewAdapter mAdapter =
new FirebaseRecyclerViewAdapter<Task, TaskViewHolder>(Task.class, android.R.layout.simple_list_item_1, TaskViewHolder.class, mRef) {
@Override
public void populateViewHolder(TaskViewHolder taskViewHolder, Task task) {
taskViewHolder.taskText.setText(task.getText());
}
};
recycler.setAdapter(mAdapter);
这是 ViewHolder:
私有静态class TaskViewHolder 扩展RecyclerView.ViewHolder {
TextView taskText;
public TaskViewHolder(View itemView) {
super(itemView);
taskText = (TextView)itemView.findViewById(android.R.id.text1);
}
}
这是任务 class:
public class Task {
String author;
String text;
public Task() {
}
public Task(String author, String text) {
this.author = author;
this.text = text;
}
public String getAuthor() {
return author;
}
public String getText() {
return text;
}
}
有什么想法吗?提前致谢!
你真的应该把更多的错误放在你的 post 上。它会显示问题发生的位置。但是,在查看 FirebaseRecyclerViewAdapter
.
的来源后,我将尝试做出有根据的猜测
问题似乎与您传递给适配器的布局有关,android.R.layout.simple_list_item_1
。适配器需要一个由 ViewGroup
的子类包装的布局,例如 LinearLayout
、FrameLayout
或某些其他类型的布局。 android.R.layout.simple_list_item_1
是这样实现的:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />
如您所见,TextView
未包含在布局中。修复错误的最快方法是创建自己的布局,在 FrameLayout
中使用 TextView
,如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />
</FrameLayout>
然后您会将创建的布局传递给适配器。让我们称之为 my_simple_list_item_1.xml
,您可以将其作为 R.layout.my_simple_list_item_1
.
传递给适配器
所以我有一个要用 FirebaseRecyclerViewAdapter 填充的 RecycleView。
我正在关注这个例子:https://github.com/firebase/firebaseui-android#using-a-recyclerview
不过我遇到了一个奇怪的错误:
java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.view.ViewGroup
这是我在 onCreateView 中的内容:
RecyclerView recycler = (RecyclerView) mView.findViewById(R.id.rvTasks);
recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
FirebaseRecyclerViewAdapter mAdapter =
new FirebaseRecyclerViewAdapter<Task, TaskViewHolder>(Task.class, android.R.layout.simple_list_item_1, TaskViewHolder.class, mRef) {
@Override
public void populateViewHolder(TaskViewHolder taskViewHolder, Task task) {
taskViewHolder.taskText.setText(task.getText());
}
};
recycler.setAdapter(mAdapter);
这是 ViewHolder:
私有静态class TaskViewHolder 扩展RecyclerView.ViewHolder { TextView taskText;
public TaskViewHolder(View itemView) {
super(itemView);
taskText = (TextView)itemView.findViewById(android.R.id.text1);
}
}
这是任务 class:
public class Task {
String author;
String text;
public Task() {
}
public Task(String author, String text) {
this.author = author;
this.text = text;
}
public String getAuthor() {
return author;
}
public String getText() {
return text;
}
}
有什么想法吗?提前致谢!
你真的应该把更多的错误放在你的 post 上。它会显示问题发生的位置。但是,在查看 FirebaseRecyclerViewAdapter
.
问题似乎与您传递给适配器的布局有关,android.R.layout.simple_list_item_1
。适配器需要一个由 ViewGroup
的子类包装的布局,例如 LinearLayout
、FrameLayout
或某些其他类型的布局。 android.R.layout.simple_list_item_1
是这样实现的:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />
如您所见,TextView
未包含在布局中。修复错误的最快方法是创建自己的布局,在 FrameLayout
中使用 TextView
,如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />
</FrameLayout>
然后您会将创建的布局传递给适配器。让我们称之为 my_simple_list_item_1.xml
,您可以将其作为 R.layout.my_simple_list_item_1
.