Android – как динамически менять высоту Recyclerview?

Я застрял в проблеме с изменением высоты Recycler на основе его общих элементов. Я попытался использовать Layout Param следующим образом:

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

или

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

Но это не сработало. Как мне это сделать ? Пожалуйста, помогите мне !

Я попробовал это. Это сработало. Может быть, помощь.

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

Вы должны использовать LayoutParams представления родителя в setLayoutParams (params).

Например:

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

Измените LayoutParams в коде.

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

Этот код работает, я уверен в этом

 ViewGroup.LayoutParams params=recyclerview.getLayoutParams(); params.height=100; recyclerview.setLayoutParams(params); 

Другое, что вы можете сделать, это сделать линейный макет как родительский вид ресайклера, а затем динамически увеличить высоту для родительского вида

Рассмотрим следующий ниже XML

 <LinearLayout andorid:id=""@+id/yourLayoutId""> <RecyclerView/> </LinearLayout 

Рассмотрим следующий код

 LinearLayout layout = (LinearLayout)findViewById(R.id.yourLayoutId); LinearLayout.LayoutParams lp = (LayoutParams) layout.getLayoutParams(); lp.height = 100;