如何滚动到scrollview内的recyclerview中的特定位置?

时间:2016-11-23 21:31:29

标签: android android-recyclerview scrollview android-nestedscrollview linearlayoutmanager

我对我的查询进行了大量搜索,但没有一个是有用的。我在一个滚动视图中有一个recyclerview和一些静态数据,它位于root parentlayout中,如下所示。

我已经设置 -

scrollview.scrollto(0,0);

因为每次我打开活动时它会跳转到recyclerview firstitem并且它会跳过recyclerview上方的静态数据。

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

用于smoothscroll。

问题出在 -

layoutmanager.scrollToPositionWithOffset(pos,0);

它不起作用。我在将适配器设置为recyclerview后设置了aboveline。也尝试使用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>

5 个答案:

答案 0 :(得分:29)

需要通过获取var dict = [String: [Double]]() dict["hello"] = (dict["hello"] ?? []) + [1] print(dict) // ["hello": [1.0]] dict["hello"] = (dict["hello"] ?? []) + [2] print(dict) // ["hello": [1.0, 2.0]] 孩子的最高职位来滚动ScrollView

RecyclerView

答案 1 :(得分:0)

您可以使用滚动查看方法到达所需位置:

scrollView.smoothScrollTo(int x, int y);

答案 2 :(得分:-1)

我知道我的回答很晚但是如果你遇到自动滚动问题,你需要在RelativeLayout中添加 android:descendantFocusability =“blocksDescendants” 。因此,您的RealtiveLyout标记将如下所示:

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

答案 3 :(得分:-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);
}

在列表视图项目中单击此列表单击列表器

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

当您打开listview时,将选择该位置..

答案 4 :(得分:-2)

使用此方法scrollToPosition (int position)这对我有用。希望这会对你有所帮助。

        mMessagesRecyclerView = (RecyclerView) findViewById(R.id.messagesRecyclerView);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setStackFromEnd(true);

        mMessagesRecyclerView.setLayoutManager(layoutManager);
        mMessagesAdapter = new MessagesAdapter();
        mMessagesRecyclerView.setAdapter(mMessagesAdapter);

        mMessagesRecyclerView.scrollToPosition(your position);

这是我的布局构建器

enter image description here