Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recyclerview doesn't resize after rotate screen

I have a Recyclerview populated with items inserted by the user. I'm implementing the funtionality of rotation, because when i turn the device, the recyclerview shows empty.

Debugging the app, i already check the integrity after and before the rotate and the ArrayList have the same size. I think that the problem is the setNestedScrollingEnabled(false) of the Recyclerview, i set this because i don't want to show a scroll in the rv.

The problem is: i'm in portrait mode and i add 3 items, it shows me perfect in the recyclerview. Check the image:

Portrait

When i rotate the screen to landscape, the arraylist of the recyclerview have the 3 items but the height doesn't change so it apppears to have only one item.

enter image description here

So, How i resolve this?

Recyclerview:

itemsRv = (RecyclerView) findViewById(R.id.itemsRv);
itemsRv.setNestedScrollingEnabled(false);
itemAutoCompleteAdapter = new ItemAutoCompleteAdapter(this);
if(items ==null){
   items = new ArrayList<>();
}
itemsAdapter = new ItemsRowAdapter(this, items, new ItemsRowAdapter.itemsRowListener() {
  @Override
  public void editarItemOnClick(View v, int position) {
  editar_item(items.get(position), position);
  }

  @Override
  public void eliminarItemOnClick(View v, final int position) {

  }
});
itemsRv.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
itemsRv.setLayoutManager(mLayoutManager);
itemsRv.setAdapter(itemsAdapter);

Layout:

  <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="8dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="8dp">

                <android.support.v7.widget.AppCompatTextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left"
                    android:layout_marginBottom="4dp"
                    android:text="Items"
                    android:textSize="16sp"
                    android:textStyle="bold" />

                <LinearLayout
                    android:id="@+id/header_rv_items"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:visibility="visible">

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

                        <TextView
                            android:id="@+id/textView3"
                            android:layout_width="@dimen/widthColumnTable"
                            android:layout_height="wrap_content"
                            android:layout_weight="2.8"
                            android:textStyle="bold"
                            android:text="Descripción" />

                        <TextView
                            android:id="@+id/textView5"
                            android:layout_width="@dimen/widthColumnTable"
                            android:layout_height="wrap_content"
                            android:layout_weight="0.5"
                            android:gravity="right"
                            android:textStyle="bold"
                            android:text="Cantidad" />

                        <TextView
                            android:id="@+id/textView8"
                            android:layout_width="@dimen/widthColumnTable"
                            android:layout_height="wrap_content"
                            android:layout_weight="0.7"
                            android:gravity="right"
                            android:textStyle="bold"
                            android:text="Precio total" />
                        <TextView
                            android:text="Acciones"
                            android:textStyle="bold"
                            android:layout_width="100dp"
                            android:gravity="right"
                            android:layout_height="wrap_content"
                            />


                    </LinearLayout>


                </LinearLayout>

                <android.support.v7.widget.RecyclerView   <----- HERE IT IS
                    android:id="@+id/itemsRv"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                     />


                <Button
                    android:id="@+id/btn_01_agregar_item"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left"
                    android:layout_marginTop="20dp"
                    android:background="@drawable/border_spinner"
                    android:gravity="left|center_vertical"
                    android:paddingLeft="16dp"
                    android:paddingRight="16dp"
                    android:text="Ingrese el código o descrpción del producto"
                    android:textAllCaps="false"
                    android:textColor="#616161" />


            </LinearLayout>
        </android.support.v7.widget.CardView>

i've tried to change the android:layout_height to wrap_content and match_parent without success.

Thank you very much!

like image 408
Adan_SL Avatar asked Oct 29 '22 12:10

Adan_SL


1 Answers

i have found a solution.

i put the Recyclerview inside a RelativeLayout like this:

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
    <android.support.v7.widget.RecyclerView
    android:id="@+id/itemsRv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</RelativeLayout>

In the code, i add this

itemsRv.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);

itemsRv.setLayoutManager(mLayoutManager);
RelativeLayout.LayoutParams lp =
                new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); //<--- ADD
itemsRv.setLayoutParams(lp);//<--- ADD
itemsRv.setAdapter(itemsAdapter);

And it works perfectly, i got the idea from https://stackoverflow.com/a/34543165/3200714

like image 83
Adan_SL Avatar answered Nov 09 '22 16:11

Adan_SL