与ScrollView .scrollTo not working? Saving ScrollView position on rotation相同
我在onCreate中动态地向scrollView添加项目。我在添加所有项目后尝试以下操作:
// no effect
ScrollView mainScroll = (ScrollView) findViewById(R.id.average_scroll_mainScroll);
// no effect
ScrollView mainScroll = (ScrollView) findViewById(R.id.average_scroll_mainScroll);
mainScroll.post(new Runnable() {
public void run(){
ScrollView mainScroll = (ScrollView) findViewById(R.id.average_scroll_mainScroll);
mainScroll.scrollTo(0, 0);
}
});
// works like a charm
ScrollView mainScroll = (ScrollView) findViewById(R.id.average_scroll_mainScroll);
mainScroll.postDelayed(new Runnable() {
public void run(){
ScrollView mainScroll = (ScrollView) findViewById(R.id.average_scroll_mainScroll);
mainScroll.scrollTo(0, 0);
}
}, 30);
我的结论是,有一些事件,如'DOM准备'?有没有回调?
5条答案
按热度按时间jmp7cifd1#
您不需要扩展ScrollView并根据David Daudelin为this question提供的答案创建自己的ScrollView。
获取
ScrollView
的ViewTreeObserver
,并将OnGlobalLayoutListener
添加到ViewTreeObserver
。然后从OnGlobalLayoutListener
的onGlobalLayout()
方法调用ScrollView.scrollTo(x,y)
方法。代码:ca1c2owp2#
这对我很有效,将
scrollView.scrollTo()
替换为瓦西里·卡布诺夫的回答帮助了我。
ScrollView .scrollTo not working? Saving ScrollView position on rotation
ubbxdtey3#
当您对ScrollView进行某些更改时,它需要一段时间才能将布局更改复制到显示列表,并通知ScrollView它确实可以滚动到某个位置。
我已经设法让它工作,用我自己的ScrollView扩展
ScrollView
,并添加一个方法,根据需要添加OnGlobalLayoutListener
(如MH所建议的)并在稍后滚动。这比将其应用于您需要的每个案例更加自动化(但是您需要使用新的ScrollView
)。这是一个简单的例子。对我来说非常有用,因为我想在添加后立即滚动到ScrollView中的给定View。
ljsrvy3e4#
试试这个它的工作原理:(Kotlin)
lyr7nygr5#
下面是滚动recycleView的示例: