Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Android] Cannot scroll ScrollView inside bottom sheet #8

Open
tommag21 opened this issue Jul 5, 2022 · 10 comments
Open

[Android] Cannot scroll ScrollView inside bottom sheet #8

tommag21 opened this issue Jul 5, 2022 · 10 comments

Comments

@tommag21
Copy link

tommag21 commented Jul 5, 2022

On Android I cannot scroll a ScrollView placed inside a bottom sheet. A RadListView works fine.

I have updated the test repo to test this bug: https://github.com/tommag21/bottomsheet-test

@farfromrefug
Copy link
Member

@tommag21 it is normal. N scrollview wont support it. You need to use a NestedScrollView using a class like this:

class NestedScrollView extends ScrollView {
    createNativeView() {
        if (__ANDROID__) {
            return new androidx.core.widget.NestedScrollView(this._context);
        }
        return super.createNativeView();
    }
}

@tommag21
Copy link
Author

tommag21 commented Jul 5, 2022

Thanks. Do you have a sample or a demo I can refer to? I don't know how do I have to initialise the component correctly in a NativeScript-Vue app.

I tried registering the component on my main like this:

Vue.registerElement("NestedScrollView", () => NestedScrollView, {});

But when I try to scroll the bottom sheet (with matching scrollViewId and bottomsheet id) I get this error:

StackTrace
System.err: An uncaught Exception occurred on "main" thread.
System.err: Calling js method onTouchEvent failed
System.err: TypeError: this.nativeViewProtected.getScrollEnabled is not a function
System.err: 
System.err: StackTrace:
System.err: [isScrollEnabled:getDefault](file: app/webpack:/mynativescriptapp/node_modules/@nativescript/core/ui/scroll-view/index.android.js:48:0)
System.err:     at Property.set(file: app/webpack:/mynativescriptapp/node_modules/@nativescript/core/ui/core/properties/index.js:188:0)
System.err:     at set isScrollEnabled(file: app/webpack:/mynativescriptapp/node_modules/@nativescript-community/ui-persistent-bottomsheet/index.js:299:0)
System.err:     at set translationY(file: app/webpack:/mynativescriptapp/node_modules/@nativescript-community/ui-persistent-bottomsheet/index.js:112:0)
System.err:     at onGestureTouch(file: app/webpack:/mynativescriptapp/node_modules/@nativescript-community/ui-persistent-bottomsheet/index.js:404:0)
System.err:     at _handleEvent(file: app/webpack:/mynativescriptapp/node_modules/@nativescript/core/data/observable/index.js:230:0)
System.err:     at notify(file: app/webpack:/mynativescriptapp/node_modules/@nativescript/core/data/observable/index.js:216:0)
System.err:     at onTouchEvent(file: app/webpack:/mynativescriptapp/node_modules/@nativescript-community/gesturehandler/gesturehandler.android.js:131:0)
System.err:     at com.tns.Runtime.callJSMethodNative(Native Method)
System.err:     at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1302)
System.err:     at com.tns.Runtime.callJSMethodImpl(Runtime.java:1188)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1175)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1153)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1149)
System.err:     at com.tns.gen.com.swmansion.gesturehandler.OnTouchEventListener.onTouchEvent(OnTouchEventListener.java:30)
System.err:     at com.swmansion.gesturehandler.GestureHandler.dispatchTouchEvent(GestureHandler.java:90)
System.err:     at com.swmansion.gesturehandler.GestureHandlerOrchestrator.deliverEventToGestureHandler(GestureHandlerOrchestrator.java:320)
System.err:     at com.swmansion.gesturehandler.GestureHandlerOrchestrator.deliverEventToGestureHandlers(GestureHandlerOrchestrator.java:272)
System.err:     at com.swmansion.gesturehandler.GestureHandlerOrchestrator.onTouchEvent(GestureHandlerOrchestrator.java:103)
System.err:     at com.nativescript.gesturehandler.PageLayout.dispatchTouchEventToOrchestrator(PageLayout.java:119)
System.err:     at com.nativescript.gesturehandler.PageLayout.dispatchTouchEvent(PageLayout.java:132)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at com.nativescript.gesturehandler.PageLayout.dispatchTouchEvent(PageLayout.java:135)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:488)
System.err:     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1871)
System.err:     at android.app.Activity.dispatchTouchEvent(Activity.java:4125)
System.err:     at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
System.err:     at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:446)
System.err:     at android.view.View.dispatchPointerEvent(View.java:14568)
System.err:     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6016)
System.err:     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5819)
System.err:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310)
System.err:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
System.err:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
System.err:     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5485)
System.err:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
System.err:     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5542)
System.err:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
System.err:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
System.err:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
System.err:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
System.err:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
System.err:     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8080)
System.err:     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8031)
System.err:     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7992)
System.err:     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8203)
System.err:     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
System.err:     at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
System.err:     at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:200)
System.err:     at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:8160)
System.err:     at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:8242)
System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:972)
System.err:     at android.view.Choreographer.doCallbacks(Choreographer.java:796)
System.err:     at android.view.Choreographer.doFrame(Choreographer.java:724)
System.err:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
System.err:     at android.os.Handler.handleCallback(Handler.java:938)
System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
System.err:     at android.os.Looper.loop(Looper.java:223)
System.err:     at android.app.ActivityThread.main(ActivityThread.java:7656)
System.err:     at java.lang.reflect.Method.invoke(Native Method)
System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
System.err: com.tns.NativeScriptException: Error: Cannot convert object to Ljava/lang/Throwable; at index 0
System.err:     at com.tns.Runtime.passExceptionToJsNative(Native Method)
System.err:     at com.tns.Runtime.passUncaughtExceptionToJs(Runtime.java:84)
System.err:     at com.tns.NativeScriptUncaughtExceptionHandler.uncaughtException(NativeScriptUncaughtExceptionHandler.java:34)
System.err:     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
System.err:     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
System.err:     at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)

@tommag21
Copy link
Author

tommag21 commented Jul 5, 2022

I managed to override the methods [isScrollEnabledProperty.getDefault] [isScrollEnabledProperty.setNative but now I get a ViewGroup error. I tried installing the plugin @triniwiz/nativescript-nested-scrollview but got the same error.

Stack trace
System.err: An uncaught Exception occurred on "main" thread.
System.err: already recycled once
System.err: 
System.err: StackTrace:
System.err: java.lang.IllegalStateException: already recycled once
System.err:     at android.view.ViewGroup$TouchTarget.recycle(ViewGroup.java:8863)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2809)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3140)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at com.nativescript.gesturehandler.PageLayout.dispatchTouchEvent(PageLayout.java:135)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at com.nativescript.gesturehandler.PageLayout.dispatchTouchEvent(PageLayout.java:135)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
System.err:     at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:488)
System.err:     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1871)
System.err:     at android.app.Activity.dispatchTouchEvent(Activity.java:4125)
System.err:     at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
System.err:     at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:446)
System.err:     at android.view.View.dispatchPointerEvent(View.java:14568)
System.err:     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6016)
System.err:     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5819)
System.err:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310)
System.err:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
System.err:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
System.err:     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5485)
System.err:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
System.err:     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5542)
System.err:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
System.err:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
System.err:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
System.err:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
System.err:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
System.err:     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8080)
System.err:     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8031)
System.err:     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7992)
System.err:     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8203)
System.err:     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
System.err:     at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
System.err:     at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:200)
System.err:     at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:8160)
System.err:     at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:8242)
System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:972)
System.err:     at android.view.Choreographer.doCallbacks(Choreographer.java:796)
System.err:     at android.view.Choreographer.doFrame(Choreographer.java:724)
System.err:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
System.err:     at android.os.Handler.handleCallback(Handler.java:938)
System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
System.err:     at android.os.Looper.loop(Looper.java:223)
System.err:     at android.app.ActivityThread.main(ActivityThread.java:7656)
System.err:     at java.lang.reflect.Method.invoke(Native Method)
System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
System.err: com.tns.NativeScriptException: Error: Cannot convert object to Ljava/lang/Throwable; at index 0
System.err:     at com.tns.Runtime.passExceptionToJsNative(Native Method)
System.err:     at com.tns.Runtime.passUncaughtExceptionToJs(Runtime.java:84)
System.err:     at com.tns.NativeScriptUncaughtExceptionHandler.uncaughtException(NativeScriptUncaughtExceptionHandler.java:34)
System.err:     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
System.err:     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
System.err:     at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)

@farfromrefug
Copy link
Member

@tommag21 this is your error com.tns.NativeScriptException: Error: Cannot convert object to Ljava/lang/Throwable; at index 0. Cant tell you where or why it is happening. You need to investigate this in your code

@tommag21
Copy link
Author

tommag21 commented Jul 5, 2022

The ScrollView contains a v-for that renders content fetched asynchronously. Rendering the ScrollView after the content is fetched does not throw the exception, but it's still not responsive to scrolling.

At the moment I'm short on time and cannot continue debugging the nested scrollview, maybe I will continue in the future.

@fpaaske
Copy link

fpaaske commented May 12, 2023

@tommag21 it's now the future, and if you're still investigating, maybe my experience can help :)
I've had the same issue as you (but with Angular) where the ListView/ScrollView is not responding to scrolling.

After talking to the super helpful guys (like @farfromrefug) on the NativeScript discord, this is what worked for me:

Create the native class CustomNestedScrollView

@NativeClass
class CustomNestedScrollView extends androidx.core.widget.NestedScrollView {
  private scrollEnabled: boolean;
  constructor(context: any) {
    super(context);
  }

  getScrollEnabled(): boolean {
    return this.scrollEnabled;
  }

  setScrollEnabled(enabled: boolean) {
    this.scrollEnabled = enabled;
  }
}

Create the NestedScrollView to use in the markup

import {ScrollView} from "@nativescript/core";

declare var androidx;

export class NestedScrollView extends ScrollView {
  createNativeView() {
    if (__ANDROID__) {
      return new CustomNestedScrollView(this._context);
    }
    return super.createNativeView();
  }
}

Create the markup

Notice the scrollViewId link between the BottomSheet and the NestedScrollView.

<BottomSheet [stepIndex]="stepIndex"
             (stepIndexChange)="onIndexChanged($event)"
             [steps]="bottomSheetSteps"
             scrollViewId="linkedScrollView"
>
    <GridLayout height="100%"
                width="100%"
    >
        <ListView [items]="items">
            <ng-template let-item="item">
                <StackLayout [nsRouterLink]="['/item', item.id]">
                    <Label [text]="item.name"></Label>
                </StackLayout>
            </ng-template>
        </ListView>
    </GridLayout>

    <GridLayout bottomSheet
                rows="56, 100, auto"
                columns="*"
                class="bottomSheet"
    >
        <GridLayout rows="auto" columns="*, *, *, *" row="0">
            <Button col="0" text="Step 0" class="Button" (tap)="setIndex(0)"></Button>
            <Button col="1" text="Step 1" class="Button" (tap)="setIndex(1)"></Button>
            <Button col="2" text="Step 2" class="Button" (tap)="setIndex(2)"></Button>
            <Button col="3" text="Step 3" class="Button" (tap)="setIndex(3)"></Button>
        </GridLayout>
        <StackLayout row="1" backgroundColor="orange">
            <Label text="Second step section"></Label>
        </StackLayout>
        <GridLayout row="2"
                    [height]="textViewHeight"
                    class="textView"
        >
            <NestedScrollView id="linkedScrollView" class="scrollView">
                <StackLayout>
                    <StackLayout *ngFor="let item of items">
                        <Label [text]="item.name"></Label>
                    </StackLayout>
                </StackLayout>
            </NestedScrollView>
        </GridLayout>
    </GridLayout>
</BottomSheet>

Now you can scroll in the list behind the bottomSheet, you can drag the bottomSheet up and down, AND you can scroll inside the bottomSheet.

@tommag21
Copy link
Author

@fpaaske thank you! I ended up disabling the bottom sheet drag, I will try your solution asap.

@tommag21
Copy link
Author

tommag21 commented Oct 5, 2023

Gave it a try finally! That's what I did on NativeScript-Vue:

CustomNestedScrollView.ts

import { ScrollView } from "@nativescript/core";

export class NestedScrollView extends ScrollView {
  createNativeView() {
    if (__ANDROID__) {
      @NativeClass
      class CustomNestedScrollView extends androidx.core.widget.NestedScrollView {
        private scrollEnabled: boolean = true;

        constructor(context: any) {
          super(context);
        }

        getScrollEnabled(): boolean {
          return this.scrollEnabled;
        }

        setScrollEnabled(enabled: boolean) {
          this.scrollEnabled = enabled;
        }
      }

      return new CustomNestedScrollView(this._context);
    }
    return super.createNativeView();
  }
}

app.ts

import Vue from "nativescript-vue";
import { NestedScrollView } from "~/components/CustomNestedScrollView";

Vue.registerElement("NestedScrollView", () => NestedScrollView);

@tommag21
Copy link
Author

tommag21 commented Oct 5, 2023

As a side note, I had to set scrollViewId con Android only to make the ScrollView work on iOS.

<BottomSheet android:scrollViewId="linkedScrollView">

@fpaaske
Copy link

fpaaske commented Dec 7, 2023

Very nice @tommag21 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants