web-dev-qa-db-ja.com

NestedScrollViewは、Recyclerviewのサイズを変更すると上部にスクロールします

LinearLayoutとRecyclerView(RelativeLayout内)を含むNestedScrollViewがあります。

<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を非表示にすることです。何か案は?

ありがとう。

28
kevings14

数日後、私は問題の解決策を見つけました。次のように、最初のレイアウトのdescendantFocusabilityの下にScrollViewを追加する必要があります。

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

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">
15
Noman Rafique

私の場合、NestedScrollView内で複数のRecyclerViewを使用しています。それからそれは私のために働かない。私の解決策は、データの更新が完了したら、一番上までスクロールするだけです。

yourList.setAdapter(yourListAdapter);

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