所以我有一个RecycleView,我要用FirebaseRecyclerViewAdapter填充。
我正在关注此示例:https://github.com/firebase/firebaseui-android#using-a-recyclerview
但是我收到了一个奇怪的错误:
java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView无法强制转换为 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:
私有静态类TaskViewHolder扩展了RecyclerView.ViewHolder { TextView taskText;
public TaskViewHolder(View itemView) {
super(itemView);
taskText = (TextView)itemView.findViewById(android.R.id.text1);
}
}
这是Task类:
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;
}
}
有什么想法吗?提前谢谢!
答案 0 :(得分:2)
您应该在帖子上放置更多错误。它会显示问题发生的地方。但是,在查看-ms
的来源后,我会尝试做出有根据的猜测。
问题似乎与您传递给适配器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
内置TextView
,如下所示:
FrameLayout
然后,您将创建的布局传递给适配器。让我们将其称为<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
传递给适配器。