在我的应用程序中,我有主页,其中有一个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可滚动。在此先感谢(:
答案 0 :(得分:0)
答案 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 在 viewpager 中,并且您想滚动 recyclerview,那么您必须在 viewpager 中启用nestedscrollview。
如果你的 viewpager 在 recyclerview 里面,如果你想滚动 viewpager 那么你必须在 recyclerview 中启用nestedscrollview。
android:nestedScrollingEnabled="true"