Только один элемент отображается в RecyclerView

1

Я отлаживаю и получаю правильное количество элементов с сервера. И он также вызывает onCreateViewholder и onBindViewHolder столько, сколько размер элемента.

Тем не менее, мой RecyclerView показывает только один элемент в списке.

И большая часть проблемы после моего поиска была, когда высота RecyclerView равна match_parent. Мой match_parent был match_parent. Итак, я изменил его на wrap_content. Но он получает правильное количество предметов и правильные данные предметов. Но не может отображать все время в представлении Recycler.

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    ArrayList<MyData> MyDataArrayList;

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        TextView userId;

        MyViewHolder(View view) {
            super(view);
            Log.d(TAG, "created()");
            tvUserID = view.findViewById(R.id.textview_myitem);
        }
    }

    public MyAdapter (ArrayList<MyData> myDataArrayList) {
        Log.d(TAG, "new MyAdapter instance created");
        this.myDataArrayList = myDataArrayList;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder()");
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item, parent, false);

        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Log.d(TAG, "onBindViewHolder()=\nposition: " + position + ",\nitem: " + myDataArrayList.get(position).toString());

        MyViewHolder myViewHolder = (MyViewHolder) holder;

        Log.d(TAG, "getItemCount(): " + getItemCount());
        try {
            String username = myDataArrayList.get(position).getUser();
            myViewHolder.userId.setText(username);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

recyclerView = findViewById(R.id.my_recycler_view);
layoutManager = new LinearLayoutManager(MyActivity.this);
myAdapter = new myAdapter(myDataArrayList);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(layoutManager);
    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

это my_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textview_myitem"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:textSize="25dp"
        android:text="username"
        android:gravity="center_vertical"
        android:paddingLeft="15dp" />
</LinearLayout>

В чем причина этого?

Теги:
android-recyclerview

2 ответа

2
Лучший ответ

My_item.xml имеет ширину и высоту matchparent, измените высоту, чтобы обернуть содержимое.

  • 0
    И измените высоту просмотра в соответствии с родительским соответствием.
  • 1
    Я был так глуп ... спасибо. И я думаю, что для Recyclerview высота должна быть wrap_content насколько я знаю.
Показать ещё 1 комментарий
1

Проблема в вашем файле my_item.xml.
Вы должны установить android:layout_height="wrap_content" вместо android:layout_height="match_parent" и он будет работать и отображать все элементы.

В существующем коде также добавляются все элементы, но благодаря match_parent вы можете видеть только один элемент. Если вы прокрутите RecyclerView то сможете увидеть и другие элементы.

Кроме того, вы можете сохранить высоту RecyclerView как match_parent в соответствии с вашими потребностями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню