ViewPager中的RecyclerView无法滚动

时间:2019-07-28 16:50:25

标签: android android-layout android-fragments android-recyclerview android-viewpager

在我的应用程序中,我有主页,其中有一个ViewPager。我可以使用抽屉布局在ViewPager中的片段之间导航。片段之一是RecyclerView(在FrameLayout中)。问题是我无法滚动RecyclerView。

我之前曾问过一个类似的问题,并得到了解决方案,只是它是ScrollView而不是RecyclerView,而ViewPager在ConstraintLayout中,现在它必须在RelativeLayout中,以便抽屉版可以存在

布局代码:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainScreenContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/colorPrimary"
    tools:context=".MainActivity">


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

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/mainTabLayout"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:visibility="gone">

        <com.google.android.material.tabs.TabItem
            android:id="@+id/main"
            android:layout_width="match_parent"
            android:layout_height="0dp" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/activeGoals"
            android:layout_width="match_parent"
            android:layout_height="0dp" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/achievedGoals"
            android:layout_width="match_parent"
            android:layout_height="0dp" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/stats"
            android:layout_width="match_parent"
            android:layout_height="0dp" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/tipsAndTricks"
            android:layout_width="match_parent"
            android:layout_height="0dp" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/aboutUs"
            android:layout_width="match_parent"
            android:layout_height="0dp" />

    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/mainViewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_alignParentBottom="true"
        android:layout_below="@id/mainToolbar"/>

    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:layout_below="@id/mainToolbar">

        <com.google.android.material.navigation.NavigationView
            android:id="@+id/list_nav_drawer"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:menu="@menu/menu_items" />


    </androidx.drawerlayout.widget.DrawerLayout>



</RelativeLayout>

fragment_active_goals.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    tools:context=".ActiveGoals">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/activeGoalsRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

我希望RecyclerView可滚动。在此先感谢(:

5 个答案:

答案 0 :(得分:0)

尝试在recycleview的XML中添加行:

android:nestedScrollingEnabled="true"

或遵循此this answer

答案 1 :(得分:0)

简而言之,RecyclerView默认情况下是可滚动的,除非在其他布局中,否则我可能会说嵌套的RecyclerView。因此,如果希望FrameLayout内的RecyclerView可滚动,只需在RecyclerView内设置 nestedScrollingEnabled =“ true” 。 详细信息:请遵循此answer

答案 2 :(得分:0)

尝试这样的事情:

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <include
        android:id="@+id/mainToolbar"
        layout="@layout/main_toolbar_layout" />
    .
    .
    .
    .
    .
    .
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.drawerlayout.widget.DrawerLayout>

或者您可以使用如下所示的自定义回收站视图:

public class CustomRecycleriew extends RecyclerView{

    public CustomRecycleriew(Context context) {
        super(context);
    }

    public CustomRecycleriew(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomRecycleriew(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                getParent().requestDisallowInterceptTouchEvent(true);
                break;

            case MotionEvent.ACTION_UP:
                getParent().requestDisallowInterceptTouchEvent(false);
                break;

            case MotionEvent.ACTION_CANCEL:
                getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        return super.dispatchTouchEvent(event);
    }

}

答案 3 :(得分:0)

我有同样的问题。 定义recyclerView.adapter

写这个

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

我希望这对其他人有用

答案 4 :(得分:0)

如果您的 recyclerview 在 vi​​ewpager 中,并且您想滚动 recyclerview,那么您必须在 viewpager 中启用nestedscrollview。

如果你的 viewpager 在 recyclerview 里面,如果你想滚动 viewpager 那么你必须在 recyclerview 中启用nestedscrollview。

android:nestedScrollingEnabled="true"