所以我有一个 RecycleView,我将用 FirebaseRecyclerViewAdapter 填充它。
我正在遵循这个示例: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:
私有(private)静态类TaskViewHolder扩展了RecyclerView.ViewHolder { TextView任务文本;
public TaskViewHolder(View itemView) {
super(itemView);
taskText = (TextView)itemView.findViewById(android.R.id.text1);
}
}
这是任务类:
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;
}
}
有什么想法吗?提前致谢!
最佳答案
您确实应该在帖子中添加更多错误。它会显示问题发生的位置。不过,在查看 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
传递给适配器。
关于android - FirebaseRecyclerViewAdapter 的转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33761540/