Динамическое увеличение высоты recyclerview при добавлении элемента

#android #android-recyclerview

#Android #android-recyclerview

Вопрос:

Отобразить рис

В моем приложении я хочу динамически увеличивать высоту представления recycler. По мере добавления нового элемента в разделе жалобы высота представления recycler должна увеличиваться. Есть ли способ это сделать? Пожалуйста, помогите мне с этим. Заранее спасибо.

 <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@ id/complaint_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/background_line"
            android:padding="@dimen/layout_margin"
            android:text="Complaints"
            android:textColor="@color/textColorFullBlack" />

        <LinearLayout
            android:id="@ id/complaints_container"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="@dimen/layout_margin"
            android:layout_weight="1">

            <android.support.v7.widget.RecyclerView
                android:id="@ id/complaint_recycler_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/layout_margin"
                android:divider="@color/toolBarBackground"
                android:groupIndicator="@android:color/transparent" />

        </LinearLayout>

        <TextView
            android:id="@ id/instructions_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/background_line"
            android:padding="@dimen/layout_margin"
            android:text="Instructions"
            android:textColor="@color/textColorFullBlack" />

        <FrameLayout
            android:id="@ id/instructions_container"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="@dimen/layout_margin"
            android:layout_weight="1">

            <android.support.v7.widget.RecyclerView
                android:id="@ id/instructions_recycler_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/layout_margin"
                android:divider="@color/toolBarBackground"
                android:groupIndicator="@android:color/transparent" />

        </FrameLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="@color/colorPrimary"
                android:orientation="horizontal">

                <in.palmpower.videocon.uicommon.widget.EditText
                    android:id="@ id/search_text_field"
                    style="@style/FormEditText"
                    android:layout_width="0dp"
                    android:layout_gravity="center_vertical"
                    android:layout_margin="@dimen/one_dp"
                    android:layout_weight="1"
                    android:background="@android:color/white"
                    android:inputType="textFilter"
                    android:padding="@dimen/search_edit_text_padding"
                    android:privateImeOptions="nm" />

                <Button
                    android:id="@ id/add_button"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical"
                    android:background="?attr/selectableItemBackground"
                    android:contentDescription="@string/edittext_hint_search"
                    android:padding="@dimen/button_padding"
                    android:text="@string/add_button_string"
                    android:textColor="@color/textColorWhite" />

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>
  

Комментарии:

1. @Christopher Я указал высоту в xml. Не более того.

2. установите wrap_content для вашего recyclerview и родительского макета элемента строки

Ответ №1:

Застрял в той же проблеме, которую я использовал RecyclerView с wrap_content inside LinearLayout , я меняю LinearLayout RelativeLayout , и он устанавливает RecyclerView высоту на основе дочерних элементов.

Комментарии:

1. Это действительно работает для меня после многих часов поиска и попыток.. Спасибо

2. рад, что это помогло.

Ответ №2:

Это сработает для вас

 RecyclerView mRecyclerView 
             = (RecyclerView) findViewById(R.id.complaint_recycler_view);
int originalItemSize = iteList.size();

ViewGroup.LayoutParams params = mRecyclerView.getLayoutParams();

if (itemList.size() > originalItemSize ){
    params.height = params.height   100;
    originalItemSize  = itemList.size();
    mRecyclerView.setLayoutParams(params); 
}
  

Ответ №3:

я предлагаю вам поместить recyclerview в любой другой макет (предпочтительнее относительный макет). Затем измените высоту / ширину recyclerview в качестве родительского элемента для этого макета и установите высоту / ширину родительского макета в качестве содержимого переноса. это работает для меня

Ответ №4:

WRAP_CONTENT не будет работать, если вы хотите, чтобы RecyclerView занимал часть экрана. Если вы хотите, чтобы под RecyclerView было другое содержимое, вы можете поместить RecyclerView внутри LinearLayout и использовать следующий код для динамического изменения высоты.

Я предполагаю, что вы используете список (complaint_list) для хранения жалоб.Соответствующим образом отрегулируйте complaint_height

 ViewGroup.LayoutParams params = mRecyclerView.getLayoutParams();
int complaint_height=400;
if (complaints_list.size() > 2) {
params.height = ((complaint_list.size() - 1) * 100)   complaint_height;
} else {
  params.height = complaint_height 100;
}
mRecyclerView.setLayoutParams(params); 
  

Комментарии:

1. вы разместили RecyclerView внутри LinearLayout с помощью wrap_content ?