4

スライド カードでネストされたスクロールビューを使用して、コーディネーター レイアウト動作クラスを拡張し、ネストされたスクロールおよびフリング メソッドをオーバーライドすることで、カードを上下にプルしています。

私のレイアウトでは、recylerview と 2 つのネストされたスクロール ビューがあり、1 つはヘッダーをラップしてカードを上下にプルさせるため、もう 1 つはラップしてエラー メッセージの後に表示されるエラー メッセージ用です。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/slidinguppanel_slidingcontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@android:color/white">

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_marginTop="?actionBarSize"
    android:fillViewport="true"
    android:fitsSystemWindows="true"
    android:layout_gravity="fill_vertical"
    android:layout_height="match_parent">

    <include
        android:id="@+id/blocking_error_panel"
        layout="@layout/blocking_error_panel" />

</android.support.v4.widget.NestedScrollView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nested_scroll_view"
        android:layout_width="match_parent"
        android:fillViewport="true"
        android:layout_gravity="fill_vertical"
        android:fitsSystemWindows="true"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/choose_bus_headers"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.design.widget.AppBarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clickable="false"
                android:theme="@style/AppTheme.AppBarOverlay">

                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:clickable="false"
                    android:layout_height="?actionBarSize"
                    app:popupTheme="@style/AppTheme.PopupOverlay">

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:orientation="horizontal">

                        <ImageButton
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="@color/colorPrimary"
                            android:src="@drawable/ic_publicbus_choosebus_bus" />

                        <com.wrzit.app.Utils.CustomTextView
                            android:id="@+id/txtPanelHeader"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="@dimen/toolbar_text_margin_start"
                            android:text="@string/bus_panel_header_text"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="@dimen/card_header_text_size"
                            app:typeface="roboto_regular.ttf" />

                    </LinearLayout>

                    <ImageButton
                        android:id="@+id/btnSlider"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="end"
                        android:layout_marginRight="@dimen/activity_horizontal_margin"
                        android:background="@color/colorPrimary"
                        android:padding="5dp"
                        android:src="@drawable/ic_expand_more_white_24dp" />

                </android.support.v7.widget.Toolbar>

            </android.support.design.widget.AppBarLayout>


            <com.wrzit.app.Utils.CustomTextView
                android:id="@+id/txtGPSNotification"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/notification_background"
                android:padding="@dimen/notification_padding"
                android:textAlignment="center"
                android:textColor="@android:color/white"
                android:textSize="@dimen/regular_text_size"
                android:visibility="gone"
                app:typeface="roboto_regular.ttf" />

            <com.wrzit.app.Utils.CustomTextView
                android:id="@+id/txtNetworkNotification"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/notification_background"
                android:padding="@dimen/notification_padding"
                android:textAlignment="center"
                android:textColor="@android:color/white"
                android:textSize="@dimen/regular_text_size"
                android:visibility="gone"
                app:typeface="roboto_regular.ttf" />

            <ProgressBar
                android:id="@+id/progress"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:layout_marginTop="-7dp"
                android:indeterminate="true"
                android:visibility="visible" />

            <LinearLayout
                android:id="@+id/layoutFilterBusStop"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="16dp"
                android:orientation="horizontal"
                android:visibility="gone">

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="match_parent"
                    android:orientation="vertical">

                    <TextView
                        android:id="@+id/txtFilterBusStopName"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Jalan Raja Chulan"
                        android:textColor="@android:color/black"
                        android:singleLine="true" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="12sp"
                        android:text="Filtered Bus Stop" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_weight="0.1"
                    android:layout_height="match_parent">

                    <ImageView
                        android:id="@+id/btnFilterBusStopClose"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:gravity="center|right"
                        android:src="@drawable/ic_close_black_24dp" />

                </LinearLayout>


            </LinearLayout>

        </LinearLayout>
    </android.support.v4.widget.NestedScrollView
        >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/listChooseBus"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="#E7E8E7"
        android:dividerHeight="1dp" />

</LinearLayout>

この動作は、recyclerview、またはヘッダーをラップするネストされたスクロールビューを投げるときに onNestedPreFling() のトリガーを検出します。エラーレイアウトをラップするnestedscrollviewを飛ばすと問題が発生し、onNestedPreScroll()をトリガーしますが、スクロール量がタッチスロップよりも大きい場合でも、常にonNestedPreFling()をトリガーするとは限りません。

この問題の原因を特定しようとしましたが、残念ながら特定できませんでした。うまくいけば、誰かが onNestedPreFling() の呼び出しを妨げているものを知っています。

4

0 に答える 0