web-dev-qa-db-fra.com

Comment faire défiler jusqu'à une position particulière dans recyclerview dans scrollview?

J'ai beaucoup cherché sur ma requête et aucune n'a été utile. J'ai une vue d'ensemble du recyclage et des données statiques à l'intérieur d'une vue de défilement qui se trouve à l'intérieur d'un parentlayout racine comme indiqué ci-dessous.

J'ai mis -

scrollview.scrollto(0,0);

parce que chaque fois que j'ouvre l'activité, il saute au premier élément de la vue de recyclage et ignore les données statiques au-dessus de la vue de recyclage.

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

pour un défilement fluide.

le problème est

layoutmanager.scrollToPositionWithOffset(pos,0);

ça ne marche pas. J'ai défini l'aboveline après avoir défini l'adaptateur sur recyclerview. Également essayé avec NestedScrollView mais en vain.

bien que j'aie utilisé

layoutmanager.scrollToPosition(pos);

Pour ceux qui ignorent le code, j'ai défini match_parent sur ScrollView et fillviewport sur true.

Voici ma mise en page.

<?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

Besoin de faire défiler ScrollView en obtenant la position supérieure de l'enfant de RecyclerView:

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

vous pouvez utiliser la méthode d'affichage par défilement pour atteindre les emplacements souhaités:

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