Tampilan Recycler menampilkan satu item

124

Saya menghadapi kesalahan aneh dimana recyclerview hanya menampilkan satu item. Di bawah ini adalah kode untuk adaptor recyclerview saya:

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

Saya telah menggunakan kode ini di aplikasi lain dan berfungsi dengan sempurna. Saya telah memeriksa data obrolan yang juga sempurna.

Berikut link ke file layout git repo: file layout

Rujul 1993
sumber
@OShiffer Saya telah menambahkan tautan git repo
Rujul1993
4
Coba tetapkan, wrap_contentbukan match_parenttinggi dan lebar, di tata letak Anda github.com/revic1993/androidchat/blob/master/app/src/main/res/… github.com/revic1993/androidchat/blob/master/app/src/main / res /…
Slavik
@Slavik Terima kasih itu berhasil!
Rujul1993

Jawaban:

419

Jangan gunakan match_parentketinggian untuk tampilan item Anda. Satu item memenuhi seluruh layar secara vertikal sehingga Anda tidak melihat yang lain.

Slavik
sumber
43
Google harap tambahkan beberapa peringatan Lint, buatlah lint Anda yang mengganggu kali ini!
Neon Warge
1
Oh Terima kasih, pria yang luar biasa, dalam kasus saya, saya membuat item dengan match_parent sebagai tinggi. Oleh karena itu, semua layar disimpan di belakang item pertama.
Naveed Ahmad
7
biarkan aku membelikanmu kopi! kamu baru saja menyelamatkan kewarasanku! terima kasih!
Microwth
Tidak berhasil untuk saya. Semua item hanya ditampilkan jika Buttonditempatkan sebelumnya RecyclerView. Ada saran?
Konstantin Konopko
17

saat Anda membuat row.xml untuk recyclerview harus mengikuti hal-hal berikut:

  1. Selalu gunakan "wrap_content" untuk tinggi baris, jika tidak dalam "match_parent", ini akan menempati seluruh layar untuk satu baris.

  2. Anda juga dapat mengukur ketinggian dalam dp.

Abhishek Kumar
sumber
1
saya memiliki masalah yang sama mencoba menggulir dan melihat item lainnya
Nixon Kosgei
1

Coba ubah tata letak yang digunakan dalam tampilan item Anda menjadi FrameLayout. Berikut ini contohnya.

<?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>
Searene
sumber
1

Kesalahan saya adalah saya sengaja digunakan:

LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)

dari pada:

LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
Uriel Frankel
sumber
0

1) jika recyclerview Anda vertikal maka atur juga ketinggian match_parentdan row_item.xmlketinggian recyclerviewmatch_parent

2) jika recyclerview Anda horizontal maka atur Lebar recyclerview match_parentdan row_item.xmljuga Lebarmatch_parent

misalnya: - 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" />
Gautam Surani
sumber
0

content_main.xml sebagai berikut

android:layout_width="match_parent"
android:layout_height="match_parent"

IN file row_list.xml buat perubahan berikut

android:layout_width="match_parent"
android:layout_height="wrap_content"

Saya membuat perubahan di atas itu berjalan.

abc abc
sumber