我发现android 2.x上的OnScrollChangedListener
如果在第一次绘制布局之前添加,就不会被触发。例如,当您在onCreate
/onResume
/onAttachedToWindow
等方法中添加滚动侦听器时:
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View myView = findViewById(R.id.MyView);
System.out.println(myView.getViewTreeObserver().isAlive()); // true
myView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {
@Override
public void onScrollChanged() {
// will never fire
}
});
}
}
有人知道这个问题的原因吗?
提示:似乎这个问题有时会在api
最佳答案
所以,看起来像只虫子。下面是一个简单的解决方法:
要使OnScrollChangedListener
在旧设备上工作(显然是apionWindowFocusChanged(true)中,或者在测量布局之后添加(使用GlobalLayoutListener
)。
不要忘记创建一个类似于isScrollListenerAdded
的标志,以避免重复的侦听器连接。
像这样的:
myView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!isScrollListenerAdded) {
isScrollListenerAdded = true;
// add OnScrollChangedListener here
}
}
});
详情见blog post about OnScrollChangedListener(rus;kotlin)