使用FirebaseRecyclerViewAdapter投射错误

时间:2015-11-17 16:02:53

标签: 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无法强制转换为   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;
  }
}

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

您应该在帖子上放置更多错误。它会显示问题发生的地方。但是,在查看-ms的来源后,我会尝试做出有根据的猜测。

问题似乎与您传递给适配器FirebaseRecyclerViewAdapter的布局有关。适配器需要一个由android.R.layout.simple_list_item_1的子类包装的布局,例如ViewGroupLinearLayout或其他类型的布局。 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传递给适配器。