32

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

設定しました -

scrollview.scrollto(0,0);

アクティビティを開くたびに、recyclerview firstitem にジャンプし、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>
4

5 に答える 5

35

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

float y = recyclerView.getY() + recyclerView.getChildAt(selectedPosition).getY();    
scrollView.smoothScrollTo(0, (int) y);
于 2016-12-28T12:36:29.603 に答える
0

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

scrollView.smoothScrollTo(int x, int y);
于 2017-07-26T05:36:06.893 に答える
-1

回答がかなり遅れていることは承知していますが、自動スクロールの問題が発生した場合は、RelativeLayout にandroid:descendantFocusability="blocksDescendants"を追加する必要があります。したがって、RealtiveLyout タグは次のようになります。

<RelativeLayout
    android:id="@+id/inclusionviewgroup"
    android:layout_width="match_parent"
    android:descendantFocusability="blocksDescendants"
    android:layout_height="match_parent">
于 2017-04-21T10:20:05.430 に答える
-2

ステップ 1: recyclerview でその位置を選択するためにこの行を追加します

  adaptercat.setSelectedItem(Integer.parseInt(dealtypeid));

ステップ2:現在の位置を取得して、コンストラクターの下を確認します

  public CatgerotyAdapter(Context context, ArrayList<HashMap<String, String>> arraylist,String selectedPosition) {
        this.context = context;
        this.data = arraylist;
        resultp = new HashMap<>();
        currentItemPos=Integer.parseInt(selectedPosition)-1;
    }

ステップ3:そして、この機能はアダプタにもあります

  public void setCurrentItem(int item)
    {
        this.currentItemPos = item;
    }

最後のステップ 4. この関数をクラスのアダプタの外に追加します

 private void onPagerItemClick2(Integer tag)
{
    adaptercat.setCurrentItem(tag);
    catsp.setAdapter(adaptercat);
}

この行をリストビュー項目に入れ、li​​stner をクリックします

  ((ClassName) context).onPagerItemClick2(position);

リストビューを開くと、その位置が選択されます..

于 2017-07-25T10:59:05.933 に答える