Как показать точное количество элементов в RecyclerView?
Я пытаюсь показать точные (например, 3 элемента) в RecyclerView. Наше веб-приложение показывает следующее:
Если я переведу элементы:
и отпустите мышь, он автоматически приходит к следующему:
В Android я показываю изображения с помощью RecyclerView:
Как показать точно 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, надеюсь, что это вам поможет.