Как показать точное количество элементов в RecyclerView?

Я пытаюсь показать точные (например, 3 элемента) в RecyclerView. Наше веб-приложение показывает следующее:

enter image description here

Если я переведу элементы:

enter image description here

и отпустите мышь, он автоматически приходит к следующему: enter image description here

В Android я показываю изображения с помощью RecyclerView:

enter image description here

Как показать точно 3 элемента в видимой области RecyclerView? Как избежать, чтобы показать "половину" предметов? Это возможно?

RecyclerView:

        <android.support.v7.widget.RecyclerView
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:id="@+id/rvProducts" />

Один элемент в просмотре ресайклера:

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

    <ImageView
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:id="@+id/ivProduct"
        android:src="@drawable/noimage"/>

</LinearLayout>

Код:

    LinearLayoutManager layoutManager
            = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
    RecyclerView productImageList = (RecyclerView) view.findViewById(R.id.rvProducts);
    productImageList.setLayoutManager(layoutManager);
    GalleryRecyclerAdapter adapter = new GalleryRecyclerAdapter(images);
    productImageList.setAdapter(adapter);

Ответы

Ответ 1

Одним из решений является установка width каждого дочернего элемента программно.

view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;

И размер экрана выглядит следующим образом:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics).widthPixels;

Ответ 2

Я выполнил вышеуказанную задачу как следующий подход, пожалуйста, ссылается на следующий код

В моем onCreateViewHolder() моего RecycleView Adapter я узнал ширину экрана и разделил на 3 раздела. RecycleView Adapter, проверьте его один раз.

@Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.MY_ITEM_TO_INFALTE, parent, false);

        itemView.getLayoutParams().width = (int) (getScreenWidth() / NUMBERS_OF_ITEM_TO_DISPLAY); /// THIS LINE WILL DIVIDE OUR VIEW INTO NUMBERS OF PARTS

        return new MyCreationItemAdapter.MyViewHolder(itemView);
    }

Из вышеприведенного getScreenWidth() который мы используем выше, следуйте ниже, пожалуйста, проверьте его.

public int getScreenWidth() {

        WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        return size.x;
    }

Ответ 3

В общем, для достижения этого нет прямого свойства, с которым связано переработка.

То, как это достижимо, - это отправить родительскую ширину на адаптер.

В суэдо.

    Parent width = parent container width;

    InitialiseRecyclerAdapter(parent width) {
         on create view holder {
                 Set the width of ur item layout with a width that divides ur parent width in equal parts;
          }
}

Ответ 4

Это решение работало для меня:

 private lateinit var productImageList: RecyclerView

 override fun onAttachedToRecyclerView(recyclerView: RecyclerView) 
  {
       super.onAttachedToRecyclerView(recyclerView)

        productImageList = recyclerView
  }

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
        val viewHolder = LayoutInflater.from(parent.context).inflate(R.layout.ITEM_TO_INFALTE, parent, false)

        viewHolder.layoutParams.width = productImageList.measuredWidth / NUMBERS_OF_ITEM_TO_DISPLAY

        return ProductViewHolder(viewHolder)
    }

Код находится в kotlin, надеюсь, что это вам поможет.