【问题标题】:Disable NestedScrollview scroll禁用 NestedScrollview 滚动
【发布时间】:2018-11-19 03:01:12
【问题描述】:

我的应用程序设计

屏幕 - 1

    <NestedScrollview>
       <LinearLayout orientation:horizontal">
          <RecyclerView-1>
          <Framelayout>(contains Recyclerview-2)
    </NestedScroll>

屏幕 - 2

     <NestedScrollview>
         <LinearLayout orientation:horizontal">
         <RecyclerView-1>
         <Framelayout> (fragment changed, contains Recyclerview-3)
     </NestedScroll>

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

【问题讨论】:

  • setnestedscrollingenabled 将其设置为 false。
  • 在recyclerview android:descendantFocusability="blocksDescendants"中试试这个添加属性。
  • @farhana setnestedscrollingenabled 将平滑 RV 的滚动,但我需要禁用 NSV 的滚动
  • 你找到解决办法了吗?

标签: android android-recyclerview android-framelayout android-nestedscrollview


【解决方案1】:

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

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:

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

终于在你的活动中:

LockableNestedScrollView myScrollView = (LockableNestedScrollView) findViewById(R.id.scroll_name);
myScrollView.setScrollingEnabled(false);

我希望它可以帮助别人。

【讨论】:

  • 你先生太棒了
猜你喜欢
  • 1970-01-01
  • 2015-09-11
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多