web-dev-qa-db-fra.com

Comment afficher le nombre exact d'éléments dans RecyclerView?

J'essaie de montrer l'exact (par exemple 3 éléments) dans RecyclerView. Notre application Web montre comme ceci:

 enter image description here

Si je déplace des objets:

 enter image description here

et relâchez la souris, il vient automatiquement à ceci:  enter image description here

Sous Android, je montre des images à l'aide de RecyclerView:

 enter image description here

Comment afficher exactement 3 éléments dans la zone visible de RecyclerView? Comment éviter de montrer des "demi" articles? Est-ce possible?

RecyclerView:

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

Un élément dans la vue recycleur:

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

Code:

    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);
16
Joe Richard

Une solution consiste à définir width de chaque enfant comme par programme.

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

Et la taille de l'écran comme ceci:

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

J'ai effectué la tâche ci-dessus comme approche suivante, veuillez vous référer au code suivant

Sur mononCreateViewHolder()méthode de monRecycleView Adapter, je découvre la largeur de l'écran et que divisé en 3 sections.Veuillez vérifier une fois.

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

De ci-dessus codegetScreenWidth()méthode que nous utilisons ci-dessus est comme suit, s'il vous plaît vérifier.

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;
    }
7
Ravindra Kushwaha

De manière générale, il n’existe aucune propriété directe pour la vue recycleur. 

Pour ce faire, vous devez envoyer la largeur du parent à l'adaptateur. 

D'une manière suedo .. 

    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;
          }
}
2
Glenford Fernandes

Cette solution a fonctionné pour moi: 

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

Le code est en kotlin, espérons qu'il vous aidera.

0
Fisnik Ibishi