Подтвердить что ты не робот

NestedScrollView прокручивается вверху на Recycliewiew resized

У меня есть NestedScrollView, содержащий LinearLayout и RecyclerView (как внутри RelativeLayout).

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scroll">

    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/lay_account">


        <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@android:color/white"
                android:paddingTop="10dp"
                android:id="@+id/lay_total"
                android:paddingBottom="10dp">

            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/total"
                    android:id="@+id/lblTotal"
                    android:textSize="@dimen/text_medium"
                    android:layout_marginLeft="20dp"
                    android:textColor="@color/dark_eurakostheme_color"
                    android:textStyle="bold"/>


            <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical|center_horizontal">

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/txtTotalAmount"
                        android:textSize="@dimen/text_extra_extra_large"
                        android:gravity="center_horizontal"
                        android:textColor="@color/eurakostheme_color"/>

                <ImageView
                        android:layout_width="@dimen/icon_extra_extra_large"
                        android:layout_height="match_parent"
                        android:id="@+id/imageView3"
                        android:src="@drawable/coin_eurakos"/>
            </LinearLayout>

        </LinearLayout>

        <View
                android:layout_width="fill_parent"
                android:layout_height="1dp"
                android:id="@+id/divisor"
                android:background="@color/dividerColor"
                android:layout_alignBottom="@+id/lay_total"/>

        <android.support.v7.widget.RecyclerView
                android:layout_below="@id/lay_total"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/rclBasketAmounts"
                android:background="@android:color/white"
                android:padding="10dp">
        </android.support.v7.widget.RecyclerView>

    </RelativeLayout>

</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

После загрузки данных в RecyclerView мне нужно изменить его высоту программно следующим образом:

RelativeLayout.LayoutParams lay_params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
    50 + ((int) (baskets.length * getResources().getDimension(R.dimen.list_height_small))));

lay_params.addRule(RelativeLayout.BELOW, lay_total.getId());
recyclerView.setLayoutParams(lay_params);
recyclerView.setAdapter(new ListBasketAmountAdapter(baskets));

Проблема в том, когда данные закончены, загрузка прокрутки NestedScrollView автоматически прокручивается до вершины RecyclerView, скрывая LinearLayout над ней. Любые идеи?

Спасибо.

4b9b3361

Ответ 1

Через несколько дней я нашел решение проблемы. Вам просто нужно добавить descendantFocusability в первый макет под ScrollView следующим образом:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lay_account"
    android:descendantFocusability="blocksDescendants">

Ответ 2

Решение, данное kevings14, работает, но в моем случае это не помогло. У меня есть RecyclerView + пара EditText под NestedScrollView, когда я добавил

android:descendantFocusability="blocksDescendants"

в главном макете в режиме просмотра прокрутки. Мне не удалось сфокусировать EditText.

Тогда я придумал это решение, которое сработало для меня.

<RelativeLayout
   android:layout_width="match_parent"
   android:focusable="true"
   android:focusableInTouchMode="true"
   android:layout_height="wrap_content">

Ответ 3

В моем случае я использую несколько RecyclerView внутри NestedScrollView. затем Это не работает для меня. Поэтому мое решение: когда мое обновление данных завершено, я просто прокручиваю вверх,

yourList.setAdapter(yourListAdapter);

scrollView.post(new Runnable() {
    @Override
    public void run() {
         scrollView.fullScroll(ScrollView.FOCUS_UP);
         //scrollView.scrollTo(0,0);
    }
});

Ответ 4

У меня было вложенное представление прокрутки, которое прокручивалось само по себе. В последующем методе просмотра повторного просмотра я прокрутил nestedscrollview до (0,0) и все хорошо.

    rvComments.setAdapter(adapterComment); 
    rvComments.post(new Runnable() {
        @Override
        public void run() {
            nestedScrollView.scrollTo(0, 0);
        }
    });