Vista de reciclador que muestra un solo artículo

124

Me enfrento a un extraño error en el que la vista de reciclaje solo muestra un elemento. A continuación se muestra el código para mi adaptador de vista de reciclaje:

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

Ya he usado este código en otra aplicación y funciona perfectamente. He comprobado los datos de los chats, que también son perfectos.

Aquí hay un enlace a los archivos de diseño de repositorio git: archivos de diseño

Rujul1993
fuente
@OShiffer He agregado el enlace de repositorio de git
Rujul1993
44
Intente establecer en wrap_contentlugar de match_parentaltura y ancho en sus diseños github.com/revic1993/androidchat/blob/master/app/src/main/res/… github.com/revic1993/androidchat/blob/master/app/src/main / res /…
Slavik
@Slavik ¡Gracias, funcionó!
Rujul1993

Respuestas:

419

No use la match_parentaltura para la vista de su artículo. Un elemento ocupa toda la pantalla verticalmente para que no vea otro.

Slavik
fuente
43
Google, por favor agregue algunas advertencias de pelusa, ¡haga que su molesta pelusa sea útil esta vez!
Neon Warge
1
Oh, gracias, hombre impresionante, en mi caso creé un elemento con match_parent como altura. Por lo tanto, toda la pantalla se mantuvo detrás del primer elemento.
Naveed Ahmad
77
¡déjame comprarte un café! ¡Acabas de salvar mi cordura! ¡Gracias!
2017
No funciona para mi Todos los artículos se muestran solo si se Buttoncolocaron antes RecyclerView. ¿Alguna sugerencia?
Konstantin Konopko
17

cuando esté creando row.xml para la vista de reciclaje, debe seguir estas cosas:

  1. Utilice siempre "wrap_content" para la altura de la fila; de lo contrario, en "match_parent" ocupará toda la pantalla durante una sola fila.

  2. También puedes tomar la altura en dp.

Abhishek Kumar
fuente
1
tuve el mismo problema, intenté desplazarme y vi el resto de los elementos
Nixon Kosgei
1

Intente cambiar el diseño utilizado en la vista de elementos a FrameLayout. Aquí hay un ejemplo.

<?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
fuente
1

Mi error fue que usé Accidantly:

LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)

en vez de:

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

1) si su vista de reciclaje es vertical, establezca también la altura de la vista de reciclaje match_parenty la row_item.xmlalturamatch_parent

2) si su vista de reciclaje es horizontal, configure el Ancho de vista de reciclaje match_parenty el row_item.xmlAncho tambiénmatch_parent

por ejemplo: - RecyclerView horizontal

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

content_main.xml de la siguiente manera

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

EN el archivo row_list.xml realiza los siguientes cambios

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

Hago los cambios anteriores que se ejecuta.

abc abc
fuente