web-dev-qa-db-ja.com

scrollview内のrecyclerviewで特定の位置にスクロールする方法は?

クエリに関して多くの検索を行ったが、どれも役に立たなかった。以下に示すように、root parentlayout内にあるスクロールビュー内にrecyclerviewといくつかの静的データがあります。

設定しました-

scrollview.scrollto(0,0);

アクティビティを開くたびにrecyclerviewの最初の項目にジャンプし、recyclerviewの上の静的データをスキップするためです。

recyclerview.setNestedScrollingEnabled(false); 
recyclerview.setfocusable(false);

スムーズスクロール用。

問題は-

layoutmanager.scrollToPositionWithOffset(pos,0);

動作していません。アダプタをrecyclerviewに設定した後、上記の行を設定しました。 NestedScrollViewでも試してみましたが、無駄でした。

私は使用しましたが

layoutmanager.scrollToPosition(pos);

コードをスキップする人のために、match_parentをScrollViewに設定し、fillviewportをtrueに設定しました。

これが私のレイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/bottomsheet"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="com.inkdrops.khaalijeb.BrandCouponActivity">

    <RelativeLayout
        Android:id="@+id/inclusionviewgroup"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <static data/>

        <ScrollView
            Android:id="@+id/scrollviewmain"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_below="@+id/one"
            Android:fillViewport="true"
            Android:scrollbars="none"
            Android:layout_above="@+id/donelayout">


            <staticdata/>

                <TextView
                    Android:id="@+id/dealstext"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_below="@+id/card1"
                    Android:layout_marginTop="10dp"
                    Android:layout_marginLeft="10dp"
                    Android:textSize="16sp"
                    Android:text="Deals &amp; Coupons"
                    Android:textColor="#444444" />

                <RelativeLayout
                    Android:id="@+id/recyclerlayout"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:layout_below="@+id/dealstext"
                    Android:layout_marginTop="5dp"
                    Android:layout_marginLeft="8dp"
                    Android:layout_marginRight="8dp"
                    Android:background="@color/colorbackground">

                    <Android.support.v7.widget.RecyclerView
                        Android:id="@+id/coupon_rec_view"
                        Android:layout_width="match_parent"
                        Android:layout_height="wrap_content"
                        Android:background="@color/colorbackground"
                        Android:visibility="visible"/>


                </RelativeLayout>

                <statisdata>


            </RelativeLayout>

        </ScrollView>

        include layout="@layout/activity_coupons"
            Android:visibility="gone"
            />

    </RelativeLayout>

</RelativeLayout>
28
Sniper

ScrollViewの子の最上位を取得してRecyclerViewをスクロールする必要があります。

float y = recyclerView.getY() + recyclerView.getChildAt(selectedPosition).getY();    
scrollView.smoothScrollTo(0, (int) y);
31
Vaibhav Jani

スクロールビューメソッドを使用して、次のように目的の場所に到達できます。

scrollView.smoothScrollTo(int x, int y);
0
Pratik Pitale