2016-04-12 1 views
56

У меня возникла странная ошибка, когда recyclerview показывает только один элемент. Ниже код для моего recyclerview адаптера:Вид ресайклера, показывающий отдельный элемент

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

Я уже использовал этот код в другом приложении и его прекрасно работает. Я проверил данные чатов, которые также идеально подходят.

Вот ссылка на файлы макета мерзавец репо: layout files

+0

добавить свой XML-код – OShiffer

+0

@OShiffer Я добавил ссылку репо мерзавец – Rujul1993

+3

Попробуйте установить 'wrap_content' вместо' match_parent' для высоты и ширины в верстку https: // GitHub .com/revic1993/androidchat/blob/master/app/src/main/res/layout/my_chat_child.xml # L4 https://github.com/revic1993/androidchat/blob/master/app/src/main/res/ layout/their_chat_child.xml # L4 – Slavik

ответ

220

Не используйте match_parent по высоте для вашего зрения позиции. Один элемент заполняет весь экран вертикально, поэтому вы не видите другого.

+22

Google, пожалуйста, добавьте некоторые предупреждения Lint, сделайте ваш раздражающий линт полезным на этот раз! –

+1

О, спасибо, Удивительный человек, в моем случае я создал элемент с match_parent как высоту. Поэтому весь экран хранился позади первого элемента. –

+5

Позвольте мне купить вам кофе, вы просто сохранили мое здравомыслие! – microwth

6

при создании row.xml для recyclerview должен следовать этим вещам:

  1. Всегда используйте «Wrap_content» для высоты строки в противном случае в «match_parent» она будет занимать весь экран для одной строки ,

  2. Вы также можете взять высоту в дп.

+0

У меня была такая же проблема, пробовала прокрутку и увидела остальную часть предметов –

+1

ваш второй пункт помог мне :) –

+0

Спасибо @AdarshGumashta –

-1

1), если ваш recyclerview является вертикальной затем установить высоту recyclerview match_parent и row_item.xml высоты также match_parent

2) если ваш recyclerview находится в горизонтальном положении, то устанавливается Ширина recyclerview match_parent и row_item.xml Ширина также match_parent

для:: Горизонтальный 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" />