web-dev-qa-db-de.com

Recycler-Ansicht, die ein einzelnes Element zeigt

Ich bin mit einem seltsamen Fehler konfrontiert, bei dem nur ein einziger Artikel angezeigt wird. Nachfolgend finden Sie den Code für meinen Recyclerview-Adapter:

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

Ich habe diesen Code bereits in einer anderen App verwendet und funktioniert einwandfrei. Ich habe die Chats-Daten geprüft, was ebenfalls perfekt ist.

Hier ist ein Link zu git repo layout files: layout files

89
Rujul1993

Verwenden Sie nicht match_parent für die Höhe Ihrer Artikelansicht. Ein Element füllt den gesamten Bildschirm vertikal aus, sodass Sie kein anderes sehen können. 

331
Slavik

wenn Sie row.xml für das Recycling erstellen, sollten Sie Folgendes beachten:

  1. Verwenden Sie immer "wrap_content" für die Höhe der Zeile. Andernfalls wird in "match_parent" der gesamte Bildschirm für eine einzelne Zeile belegt.

  2. Sie können auch die Höhe in dp nehmen.

13
Abhishek Kumar

Ändern Sie das in Ihrer Artikelansicht verwendete Layout in FrameLayout. Hier ist ein Beispiel.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/item"
    Android:layout_width="match_parent"
    Android:layout_height="?listPreferredItemHeight"
    Android:clickable="true"
    Android:focusable="true"
    Android:foreground="?selectableItemBackground">

    <TextView
        Android:id="@+id/textView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginStart="8dp"
        Android:layout_marginTop="8dp"
        Android:layout_marginEnd="8dp"
        Android:layout_marginBottom="8dp"/>
</FrameLayout>
0
Searene

1) Wenn Ihr Recycling-Überblick vertikal ist, legen Sie die Höhe des Recycling-Codes match_parent und row_item.xml height ebenfalls match_parent fest.

2) Wenn das Recyclingfenster horizontal ist, legen Sie die Breite des Recyclingverzeichnisses match_parent und row_item.xml Breite ebenfalls match_parent fest.

zum Beispiel: - 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" />
0
Gautam Surani