web-dev-qa-db-fra.com

Android - Comment changer la hauteur de Recyclerview de manière dynamique?

Je suis coincé avec un problème au sujet de changer la taille de recycleur basé sur ses articles totaux. Ce que j’ai essayé, c’est d’utiliser Layout Param comme ceci:

        ViewGroup.LayoutParams params = myRecyclerView.getLayoutParams();
        params.height = itemHeight * numberOfItem;
        myRecyclerView.requestLayout();

ou

       ViewGroup.LayoutParams params = new  RecyclerView.LayoutParams(..WRAP_CONTENT, ...WRAP_CONTENT);;
       params.height = itemHeight * numberOfItem;
       myRecyclerView..setLayoutParams(params);

Mais ça n'a pas marché. Comment puis-je le faire ? Aidez-moi, s'il vous plaît !

14
Lạng Hoàng

Vous devez utiliser LayoutParams de la vue parent dans setLayoutParams (params).

Par exemple:

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    >
    <Android.support.v7.widget.RecyclerView
        Android:id="@+id/images"
        Android:layout_width="wrap_content"
        Android:layout_height="360dp"
        >
    </Android.support.v7.widget.RecyclerView>
 </Relativelayout>

Changez LayoutParams dans le code.

  RelativeLayout.LayoutParams lp =
            new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 500);
 recyclerView.setLayoutParams(lp);
9
fuxi chu

J'ai essayé ça. Ça a marché. Peut être une aide.

@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {

    //this change height of rcv
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
     params.height =80; //height recycleviewer
     feedListRowHolder.itemView.setLayoutParams(params);

    FeedItem feedItem = feedItemList.get(i);

    Picasso.with(mContext).load(feedItem.getThumbnail())
            .error(R.drawable.placeholder)
            .placeholder(R.drawable.placeholder)
            .into(feedListRowHolder.thumbnail);

    feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
    feedListRowHolder.itemView.setActivated(selectedItems.get(i, false));

    feedListRowHolder.setClickListener(new FeedListRowHolder.ClickListener() {
        public void onClick(View v, int pos, boolean isLongClick) {
            if (isLongClick) {

                // View v at position pos is long-clicked.
                String poslx = pos + "";
                Toast.makeText(mContext, "longclick " + poslx, Toast.LENGTH_SHORT).show();

            } else {
                // View v at position pos is clicked.
                String possx = pos + "";
                Toast.makeText(mContext, "shortclick " + possx, Toast.LENGTH_SHORT).show();
                toggleSelection(pos);
            }
        }
    });

}
4
eurosecom

Si vous souhaitez simplement que votre vue Recycler s'adapte automatiquement au nombre d'éléments, ne définissez pas RecyclerView height comme wrap_content.

Si vous avez plusieurs ScrollView dans la présentation, essayez d’emballer RecyclerView dans NestScrollView et définissez également sa hauteur sur wrap_content.

code:

<Android.support.v7.widget.RecyclerView
                Android:id="@+id/recyclerView"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                />
0
Jason