4

WebView とボタンを含むレイアウトがあります。ボタンは表示されますが、webview がスクロールされると表示されます。ViewTreeObserverを使っているのですが、なぜかonScrollChangedが呼び出されません。onScrollChanged の呼び出し方法を誤解していますか?

this.licenseAgreementView = (WebView) findViewById(R.id.licenseAgreementView);
ViewTreeObserver observer = this.licenseAgreementView.getViewTreeObserver();
observer.addOnScrollChangedListener(new OnScrollChangedListener() {
    public void onScrollChanged() {
    makeButtonVisible();
    }
});
4

2 に答える 2

6

私の場合、GlobalLayoutListener を scrollView にアタッチし、LayoutChanged で scrollListener を追加する必要がありました。

scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ViewTreeObserver observer = scrollView.getViewTreeObserver();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                observer.removeOnGlobalLayoutListener(this);
            } else {
                observer.removeGlobalOnLayoutListener(this);
            }
            observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    //Your code here
                }
            });
        }
    });

これは私にとってはうまくいきました。

于 2015-09-01T13:55:56.913 に答える
1
    final View scrollView = findViewById(R.id.scrollView);

    final ViewTreeObserver.OnScrollChangedListener onScrollChangedListener =
            new ViewTreeObserver.OnScrollChangedListener() {

        @Override
        public void onScrollChanged() {

            //your code here -->
            makeButtonVisible();

        }

    };


    scrollView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            ViewTreeObserver observer = scrollView.getViewTreeObserver();
            observer.addOnScrollChangedListener(onScrollChangedListener);
            return false;

        }

    });

これを試してください、私のために働きます。

于 2014-01-22T16:31:32.067 に答える