Android SetNestedScrollingEnabled 没有调用?

标签 android android-scrollview

我有一个嵌套的子 ScrollView ,它设置为禁用滚动,直到父 ScrollView 完成向上滚动。设置 childScrollView.setNestedScrollingEnabled(false) 最初有效,并在父项完全向上滚动后重新启用 childScrollView.setNestedScrollingEnabled(true)。但是,虽然这有效,但我想在父级滚动到底部后再次禁用嵌套 ScrollView ,但它不起作用。有什么想法吗?

MainActivity( fragment ):

ResponsiveScrollView parentScroll = (ResponsiveScrollView) findViewById(R.id.parentScroll);

final ScrollView childScroll = (ScrollView) findViewById(R.id.childScroll);

childScroll.setNestedScrollingEnabled(false); // disabled by default

parentScroll.setOnEndScrollListener(new PriorityNestedScrollView.OnEndScrollListener() {

    @Override
    public void onUpEndScroll() {
        Log.i(TAG, "scrolling up has ended"); // successfully fires

        childScroll.setNestedScrollingEnabled(true); // working...
    }

    @Override
    public void onDownEndScroll() {
        Log.i(TAG, "scrolling down has ended"); // successfully fires

        childScroll.setNestedScrollingEnabled(false); // not working...
    }
});

ResponsiveScrollView( fragment ):

@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
    super.onScrollChanged(x, y, oldX, oldY);

    // scroll up ended
    if (y >= END) {
        if (onEndScrollListener != null) {
            onEndScrollListener.onUpEndScroll();
        }
    }

    // scroll down ended
    if (y <= START) {
        if (onEndScrollListener != null) {
            onEndScrollListener.onDownEndScroll();
        }
    }
}

最佳答案

我是这样实现的。我拦截嵌套的滚动触摸事件,直到父级到达顶部。

响应式 ScrollView :

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (isEnableScrolling()) {
        return super.onInterceptTouchEvent(ev);
    } else {
        return true;
    }
}

...

boolean enableScrolling = false // disabled by default

public boolean isEnableScrolling() {
    return enableScrolling;
}

public void setEnableScrolling(boolean enableScrolling) {
    this.enableScrolling = enableScrolling;
}

主要 Activity :

@Override
public void onUpEndScroll() {
    Log.i(TAG, "scrolling up has ended");

    parentScroll.setEnableScrolling(true); // enable scrolling
}

@Override
public void onDownEndScroll() {
    Log.i(TAG, "scrolling down has ended");

    parentScroll.setEnableScrolling(false); // disable scrolling
}

关于Android SetNestedScrollingEnabled 没有调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33685636/

相关文章:

java - 匿名覆盖 HashSet hashCode

android - 长时间运行 Android 'service'

android - SQLite 数据库操作

android - 几个小时后融合位置停止发送更新

android - 如何设置ScrollView的起始位置?

ScrollView 的 Android 过度滚动

安卓谷歌登录: refresh expired id token

android - 为什么不在 Android 上的 NestedScrollView 中显示 View

android - 嵌套的 RecyclerView 的高度为 “wrap_content”,包含大量项目

android - 我的 scrollview 在标题 android 上方滚动