149 votes

Recycleur de vue montrant l'élément unique

Je suis confronté à une erreur étrange où recyclerview est ne montrant qu'un seul élément. Ci-dessous est le code pour mon recyclerview adaptateur :

public class ChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {


List<chat> chats;
String username;
final int My=0,Their=1;

public ChatAdapter(List<chat> chats) {
    this.chats = chats;
    this.username = PushApp.getApp().getSPF().getStringData(Constants.ANAME);
}


@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder viewHolder;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());

    switch (viewType) {
        case My:
            View v1 = inflater.inflate(R.layout.my_chat_child, parent, false);
            viewHolder = new MyChatHolder(v1);
            break;
        case Their:
            View v2 = inflater.inflate(R.layout.their_chat_child, parent, false);
            viewHolder = new TheirMessageHolder(v2);
            break;
        default:
            View v = inflater.inflate(R.layout.my_chat_child, parent, false);
            viewHolder = new MyChatHolder(v);
            break;
    }

    return viewHolder;

}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (holder.getItemViewType()) {
        case My:
            MyChatHolder myChatHolder = (MyChatHolder) holder;
            myChatHolder.setMyMessage(chats.get(position).getMessage());
            break;

        case Their:
            TheirMessageHolder theirMessageHolder = (TheirMessageHolder) holder;
            theirMessageHolder.setTheirChat(chats.get(position).getFrom(), chats.get(position).getMessage());
            break;
    }
}

@Override
public int getItemViewType(int position) {
    if(username.equalsIgnoreCase(chats.get(position).getFrom()))
        return My;
    return Their;
}

@Override
public int getItemCount() {
    return chats.size();
}}

J'ai déjà utilisé ce code dans d'autres applications, et sa fonctionne parfaitement. J'ai vérifié les chats de données qui est également parfait.

Voici le lien pour repo git fichiers de mise en page: fichiers de mise en page

501voto

Slavik Points 3688

Ne pas utiliser match_parent de la hauteur de votre point de vue. Un élément remplit tout l'écran à la verticale de sorte que vous ne verrez pas un autre.

24voto

Abhishek Kumar Points 740

lors de la création de row.xml pour recyclerview devrait suivre ces choses:

  1. Toujours utiliser "Wrap_content" pour la hauteur de la ligne en "match_parent" il occupera la totalité de l'écran pour une seule ligne.

  2. Vous pouvez également prendre de la hauteur en dp.

0voto

Gautam Surani Points 602

1) si votre recyclerview est à la verticale, puis régler la hauteur de recyclerview match_parent et row_item.xml de la hauteur aussi match_parent

2) si votre recyclerview est à l'horizontale puis définissez la Largeur de recyclerview match_parent et row_item.xml de la Largeur aussi match_parent

ex:- Horizontal RecyclerView

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="60dp"
        android:layout_marginRight="60dp" />

row_item.xml

<TextView
android:layout_width="match_parent"
android:layout_height="180dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="@drawable/rect"
android:gravity="center"
android:maxLines="2"
android:padding="10dp"
android:textColor="@color/white"
android:textSize="25sp" />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X