2015-11-17 1 views
2

J'ai donc une version de RecycleView que je dois remplir avec un objet FirebaseRecyclerViewAdapter.Erreur de fusion avec FirebaseRecyclerViewAdapter

Je suis cet exemple: https://github.com/firebase/firebaseui-android#using-a-recyclerview

Je reçois une erreur étrange, cependant:

java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView ne peut pas être castée android.view.ViewGroup

C'est ce que j'ai dans 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); 

C'est le ViewHolder:

TaskViewHolder privé de classe statique étend RecyclerView.ViewHolder { TextView taskText;

public TaskViewHolder(View itemView) { 
     super(itemView); 
     taskText = (TextView)itemView.findViewById(android.R.id.text1); 
    } 
} 

Ceci est la classe de la tâche:

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; 
    } 
} 

Toutes les idées? Merci d'avance!

Répondre

2

Vous devriez avoir vraiment placé plus de l'erreur sur votre poste. Cela aurait montré où le problème se produisait. Cependant, je vais essayer de faire une supposition éclairée après avoir regardé la source pour FirebaseRecyclerViewAdapter.

Le problème semble être lié à la présentation que vous avez transmise à l'adaptateur, android.R.layout.simple_list_item_1. L'adaptateur attend une mise en page qui est enveloppée par une sous-classe ViewGroup, telle qu'une LinearLayout, FrameLayout ou un autre type de mise en page. android.R.layout.simple_list_item_1 est mis en œuvre comme ceci:

<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" /> 

Comme vous pouvez le voir, le TextView n'est pas enveloppé dans une mise en page. La meilleure façon de corriger l'erreur serait de créer votre propre mise en page, avec un TextView à l'intérieur d'un FrameLayout comme ceci:

<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> 

Vous pouvez ensuite passer la mise en page que vous avez créé à l'adaptateur. Appelons-le my_simple_list_item_1.xml, que vous transmettez à l'adaptateur sous la forme R.layout.my_simple_list_item_1.

+0

Oui! Cela a fonctionné parfaitement, merci beaucoup! – jacoplane