首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用NestedScrollview滚动

禁用NestedScrollview滚动
EN

Stack Overflow用户
提问于 2018-06-09 12:44:21
回答 1查看 11.9K关注 0票数 14

我的应用程序的设计

屏幕-1

代码语言:javascript
复制
    <NestedScrollview>
       <LinearLayout orientation:horizontal">
          <RecyclerView-1>
          <Framelayout>(contains Recyclerview-2)
    </NestedScroll>

屏幕-2

代码语言:javascript
复制
     <NestedScrollview>
         <LinearLayout orientation:horizontal">
         <RecyclerView-1>
         <Framelayout> (fragment changed, contains Recyclerview-3)
     </NestedScroll>

现在,如果用户在屏幕1上,那么两个回收视图将同时滚动,但在屏幕2上,如果用户滚动RV1,则只有RV1将滚动。如果滚动RV3,则将滚动RV3。尝试了所有类型的停止滚动,但无法停止滚动嵌套滚动视图。

EN

回答 1

Stack Overflow用户

发布于 2019-02-28 01:32:34

您必须创建一个不对触摸和滚动事件执行任何操作的新类:

代码语言:javascript
复制
public class LockableNestedScrollView extends NestedScrollView {
    // by default is scrollable
    private boolean scrollable = true;

    public LockableNestedScrollView(@NonNull Context context) {
        super(context);
    }

    public LockableNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public LockableNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return scrollable && super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return scrollable && super.onInterceptTouchEvent(ev);
    }

    public void setScrollingEnabled(boolean enabled) {
        scrollable = enabled;
    }
}

接下来,在您的布局中,通过新类更改NestedScroll:

代码语言:javascript
复制
    <your.package.name.path.LockableNestedScrollView>
       <LinearLayout 
          orientation:"horizontal"
          android:id="@+id/scroll_name">
          <RecyclerView-1>
          <Framelayout>(contains Recyclerview-2)
    </your.package.name.path.LockableNestedScrollView>

最后,在你的活动中:

代码语言:javascript
复制
LockableNestedScrollView myScrollView = (LockableNestedScrollView) findViewById(R.id.scroll_name);
myScrollView.setScrollingEnabled(false);

我希望它能帮助其他人。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50770993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档