Android - listview - 以编程方式滚动到特定布局

时间:2015-09-16 23:11:30

标签: android listview layout smooth-scrolling

这是我的问题:

我有一个listview(带适配器),其中包含每行的多个充气布局,我希望以编程方式平滑滚动到特定布局。

例如:

这是一个列表视图行:

------------------

- -

- layout1 -

- -

- layout2 -

- layout3 -

- 等...... -

------------------

我知道在Scrollview中我们可以使用布局视图的getY()但是当我为listview中的特定布局执行此操作时它会返回0.但是我不能使用scrollview,因为我需要获取SwipeRefreshLayout (或者我们可以在Scrollview中获取它?)

我希望我很清楚,如果不是这样,请告诉我。

1 个答案:

答案 0 :(得分:0)

如果您按照onClick等操作触发滚动。

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        View row = listView.getChildAt(0);
        View layout = row.findViewById(R.id.layout_to_scroll_to);

       listView.smoothScrollToPositionFromTop(rowPositionToScrollTo, layout.getTop());
    }
});

如果您在页面加载时触发滚动。相应地在onCreate或onActivityCreated中为Activity或Fragment添加它。

getListView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        View row = listView.getChildAt(0);
        View layout = row.findViewById(R.id.layout_to_scroll_to);

        listView.smoothScrollToPositionFromTop(rowPositionToScrollTo, layout.getTop());
    }
});

smoothScrollToPositionFromTop更改为setSelectionFromTop,因为没有滚动动画。

希望这有帮助!