这是我的问题:
我有一个listview(带适配器),其中包含每行的多个充气布局,我希望以编程方式平滑滚动到特定布局。
例如:
这是一个列表视图行:
------------------
- -
- layout1 -
- -
- layout2 -
- layout3 -
- 等...... -
------------------
我知道在Scrollview中我们可以使用布局视图的getY()但是当我为listview中的特定布局执行此操作时它会返回0.但是我不能使用scrollview,因为我需要获取SwipeRefreshLayout (或者我们可以在Scrollview中获取它?)
我希望我很清楚,如果不是这样,请告诉我。
答案 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
,因为没有滚动动画。
希望这有帮助!