Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么ViewTreeObserver> OnScrollChangedListener在Android 2.x上没有调用它是否在onCreate()中设置?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我发现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
            }
        });
    }
}

那么,有谁知道这个问题的原因?

PS:似乎问题有时发生在API< =="" 15(android="">

最佳答案
所以,这似乎是一个错误.这是一个简单的解决方法

要使OnScrollChangedListener在旧设备上工作(显然API< =="">添加它,或者在测量布局之后(使用GlobalLayoutListener). 并且不要忘记创建一个像isScrollListenerAdded这样的标志,以避免重复的侦听器附加. 像这样的东西:

@H_993_5@myView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (!isScrollListenerAdded) {
            isScrollListenerAdded = true;
            // add OnScrollChangedListener here
        }
    }
});

详情请见blog post about OnScrollChangedListener(Rus; Kotlin)

大佬总结

以上是大佬教程为你收集整理的为什么ViewTreeObserver> OnScrollChangedListener在Android 2.x上没有调用它是否在onCreate()中设置?全部内容,希望文章能够帮你解决为什么ViewTreeObserver> OnScrollChangedListener在Android 2.x上没有调用它是否在onCreate()中设置?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。