0 Вопрос: Жест пальцем для навигации по фрагменту, у которого не работает Recycler View - Android

вопрос создан в Thu, May 2, 2019 12:00 AM

Я реализую жест Swipe для перехода от одного фрагмента к другому.

Фрагменты имеют вид Recycler. Я применил код жеста смахивания, реализовав OnTouchListener для fragContiner, чтобы я мог перемещаться от одного фрагмента к другому с помощью пролистывания влево и вправо.

Мой код работает нормально, когда в представлении Recycler отсутствует элемент, выполняется операция смахивания, но когда я добавляю данные в представлении Recycler, смахивание не выполняется.

Чтобы решить эту проблему, я должен применить один и тот же OnTouchListener к каждому RecyclerView, почему это так?

Почему мне нужно применять OnTouchListener for Swipe gesture для каждого RecyclerView? Почему это не вызывается с контейнером фрагмента?

Пожалуйста, используйте следующий код:

OnSwipeTouchListener.java

public abstract class OnSwipeTouchListener implements OnTouchListener {

private final GestureDetector gestureDetector;

public OnSwipeTouchListener(Context ctx) {
    gestureDetector = new GestureDetector(ctx, new GestureListener());
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                           float velocityY) {
        final int SWIPE_MIN_DISTANCE = 50;
        final int SWIPE_MAX_OFF_PATH = 150;
        final int SWIPE_THRESHOLD_VELOCITY = 50;
        try {
            if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
                    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                onSwipeLeft();
            } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                onSwipeRight();
            }
        } catch (Exception e) {
        }
        return super.onFling(e1, e2, velocityX, velocityY);
    }
}

public abstract void onSwipeRight();

public abstract void onSwipeLeft();

}

MainActivity.java

fragmentContainerRL.setOnTouchListener(new OnSwipeTouchListener(this) {
        @Override
        public void onSwipeRight() {
            if (getFragmentNo() > 0)
                onChangeFragment(getFragmentNo() - 1);// this navigates from one fragment to other
        }

        @Override
        public void onSwipeLeft() {
            if (getFragmentNo() < 4) {
                onChangeFragment(getFragmentNo() + 1);
            }
            if (getFragmentNo() == 4 && isResultsEnabled) {
                onChangeFragment(5);
            }
        }
    });

activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

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

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

    <FrameLayout
        android:id="@+id/fragmentContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="290dp"
    android:layout_height="match_parent"
    android:layout_gravity="start">

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="90dp"
            android:layout_gravity="center_vertical"
            android:background="@color/nav_bar_top_user_section_color"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <RelativeLayout
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_gravity="center"
                android:layout_marginStart="27.4dp"
                android:background="@drawable/circle_blue"
                android:gravity="center">

                <android.support.v7.widget.AppCompatTextView
                    android:id="@+id/initial_letter_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:includeFontPadding="false"
                    android:textAlignment="center"
                    android:textColor="@color/user_initial_name_color"
                    android:textSize="36sp" />
            </RelativeLayout>

            <android.support.v7.widget.AppCompatTextView
                android:id="@+id/user_name_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:ellipsize="end"
                android:fontFamily="@font/source_sans_pro_semi_bold"
                android:maxLines="1"
                android:textColor="@color/white"
                android:textSize="16sp" />
        </LinearLayout>

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/nav_drawer_gradient"
            android:paddingTop="13dp">

            <ListView
                android:id="@+id/left_drawer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                android:choiceMode="singleChoice"
                android:divider="@null" />
        </RelativeLayout>
    </LinearLayout>
</android.support.design.widget.NavigationView>

р>     

0
0 ответов                              0                         
источник размещен Вот