滚动到特定位置(启用垂直和水平滚动)网格布局 - RecyclerView - Android

时间:2017-09-15 12:06:18

标签: android android-layout scroll android-recyclerview gridlayoutmanager

我已经使用GridLayoutManager实现了一个RecyclerView,它同时具有Vertical和Horizo​​ntal Scroll,我需要将布局滚动到特定的位置,引用很多代码,但它对我来说没有用。

Java类代码:

void RackGen()
    {
        STRarray = (String[]) mStringList.toArray(new String[mStringList.size()]);
        ROWarray = (String[]) mRowList.toArray(new String[mRowList.size()]);

        numcol = Integer.parseInt(col);
        numdata = Integer.parseInt(num);

        rv = (RecyclerView) findViewById(R.id.rview);
        int numberOfColumns = numcol;

        GridLayoutManager GM2 = new GridLayoutManager(this,numberOfColumns);

        rv.setLayoutManager(GM2);



        rv.setNestedScrollingEnabled(true);
        rv.setHasFixedSize(true);
        adapter = new MyRecyclerViewAdapter(this, STRarray, ROWarray);
        rv.setAdapter(adapter);

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="20dp"
    android:layout_centerHorizontal="true"
    android:id="@+id/llzoom"
    android:orientation="vertical"
    >

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/nested_scroll_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

                <ScrollView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    xmlns:android="http://schemas.android.com/apk/res/android">

        <HorizontalScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="none"
            android:overScrollMode="never">

        <android.support.v7.widget.RecyclerView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rview">

        </android.support.v7.widget.RecyclerView>


        </HorizontalScrollView>
                </ScrollView>
        </android.support.v4.widget.NestedScrollView>
</LinearLayout>

只有在添加嵌套滚动视图以及垂直和水平滚动后,滚动才能在两个方向上平滑地进行。 现在我需要滚动到特定位置。

谢谢

2 个答案:

答案 0 :(得分:0)

您需要在活动中引用 NestedScrollView ,然后在该对象上调用scrollTo(x,y),例如:

NestedScrollView nestedScrollView  = (NestedScrollView) findViewById(R.id.nested_scroll_view);
nestedScrollView.scrollTo(x,y);

x和y是水平和垂直滚动。

答案 1 :(得分:0)

我知道这是一篇较旧的文章,并且我还没有在嵌套滚动视图中测试过此代码,但是由于您只有一个位置值,因此可以尝试使用此技术。

这非常适合滚动到具有动态自动调整功能的recyclerview GridLayoutManager的当前选定视图(我将自定义recyclerview用于自动调整,而不是网格本身)。

设置适配器后:

recyclerView.setAdapter(adapter);

我把它放在onCreate的下面:

recyclerView.post(new Runnable()
{
    @Override
    public void run()
    {
        layoutManager.scrollToPositionWithOffset(currentSelected, 0);
    }
});

它等待绘制视图,然后滚动到给定的位置。效果很好!

我在这里有个主意:https://stackoverflow.com/a/52895262/2905354