【问题标题】:Android - listview - scroll programmatically to specific layoutAndroid - listview - 以编程方式滚动到特定布局
【发布时间】:2015-09-16 23:11:30
【问题描述】:

这是我的问题:

我有一个列表视图(带有适配器),其中每行包含多个膨胀布局,我想以编程方式平滑滚动到特定布局。

示例:

这是一个列表视图行:

------

--

-布局1-

--

- 布局2-

- 布局3-

- 等等...-

------

我知道在滚动视图中我们可以使用布局视图的 getY() 但是当我在列表视图中为我的特定布局执行此操作时它返回 0。但我不能使用滚动视图因为我需要获取 SwipeRefreshLayout (或我们可以在 Scrollview 中得到它吗?)

我希望我已经足够清楚了,如果不是这样,请告诉我。

【问题讨论】:

  • 有一个类似scrollto()的方法,这个方法和smoothscroll()方法一起使用

标签: android listview layout smooth-scrolling


【解决方案1】:

如果您通过 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());
    }
});

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

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 以获得无滚动动画。

希望这会有所帮助!

【讨论】:

  • 感谢您的回答,但这是我的问题,我不想滚动到特定行,但我想滚动到一行中的特定布局。 SmoothScrollBy 方法可以完成这项工作,但我无法获得滚动的位置(view.gety()返回 0)
  • 你不应该使用getY(),而应该使用getTop()。 getTop() 返回子视图相对于其父视图的位置。如果您得到 0,则表示它位于其直接父级的顶部。
  • 我在 layout3 上尝试了 getTop(c.f 我的问题),但它也返回了 0
  • 对不起,我的错。错过了其实是一排。如果我找到任何答案,我会更新答案。
  • 好的,谢谢,但结果是一样的,我试试别的方法
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多