Отключить прокрутку NestedScrollview - PullRequest
0 голосов
/ 09 июня 2018

Дизайн моего приложения

Экран - 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.Пробовал все виды остановки прокрутки, но не смог остановить прокрутку вложенного просмотра прокрутки.

1 Ответ

0 голосов
/ 27 февраля 2019

Вы должны создать новый класс, который ничего не делает с событиями касания и прокрутки:

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);

Надеюсь, это поможет кому-то еще.

...