android - FirebaseRecyclerViewAdapter 的转换错误

标签 android firebase firebase-realtime-database firebaseui

所以我有一个 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 子类包装的布局,例如 LinearLayoutFrameLayout 或某种其他类型的布局。 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/

相关文章:

Android 应用程序在模拟器上崩溃,但 Android Studio 没有出现任何问题

android - 在现有项目中从 support-lib-v7-appcompat 切换到 actionbarsherlock lib

android - 加载 Firebase 数据之前的布局

ios - 尝试更新 firebase 但节点值被删除

android - 如何将自定义数据发送给 FutureBuilder ?

swift 4 : Parsing Firebase 4 snapshot to Model

android - Dagger 2,有时在编译时我得到 "cannot find symbol class DaggerApplicationComponent"

即使正确使用 .indexOn,Firebase 也没有定义索引

arrays - 在 Swift 中将字符串数组添加到 firebase

java - 不将自定义java对象保存在android studio的firebase中