RecyclerView不滚动并显示所有项目

问题描述:

我在ScrollView中有一个RecyclerView(和一些其他视图)。目前,RecyclerView的布局非常小(它包含了它包含的5个项目中的2个项目),并且它独立于ScrollView滚动,这显然不是很棒的用户体验。我想让RecyclerView不滚动和扩展,以便其所有项目都可见。我只是这样做,因为在应用程序的其他地方,我需要一个正常的RecyclerView滚动等,但同样的内容,我不这样做,我不知道这是什么,但我不知道这是什么。想要复制代码)。RecyclerView不滚动并显示所有项目

+0

滚动型没有建立处理嵌套滚动。你有没有检查'NestedScrollView' – Sharj

+0

你是否设法在“NonScrollRecyclerView”中一次显示所有项目?出于某种原因,我的回收者查看似乎没有在添加超过3个项目后重新计算其高度 –

+0

面对类似的问题。你有没有想出解决方案? @JeffersonTavares?我已经使用wrap_content并禁用了嵌套滚动。 –

这很简单,只需将RecyclerView的高度设置为wrap_content即可。

您也可以从回收站视图禁用嵌套的滚动,像这样受益:

RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler); 
recycler.setNestedScrollingEnabled(false); 
+0

没错。在一个侧面说明中,我确实将'RecyclerView'的高度设置为'wrap_content'。我面临的问题与将观点与毕加索的异步性和观看进出可见区域的尴尬组合联系起来。这是一个完全独立的问题。 – pstobiecki

+4

你忘了提及你必须使用NestedScrollView而不是ScrollView。我已经在下面写了它。 –

+0

采用这种方法是不是在回收视图时丢失了回收站视图,只是在一个大滚动视图中制作了一个包含所有视图的大清单?如果您尝试在该回收站视图中加载大量物品,可能会“滞后”。 –

还尝试玩:

android:overScrollMode 

setNestedScrollingEnabled解决方案(假) ISN尽可能满:你需要使用NestedScrollView代替ScrollViewfocusableInTouchMode =“true”给NestedScrollView的子代。

如果你坚持使用ScrollView,你也应该将minHeight设置为RecyclerView,并设置overScrollMode =“never”。在这种情况下,它仍然不是一个好的解决方案,因为在某些情况下

其他替代解决方案,你应该考虑的可能了minHeight是不够的:

  1. 与单一RecyclerView更换了滚动& RecyclerView ,它具有您在ScrollView中的额外视图类型的视图

  2. 改为使用GridLayout或其他布局。

+0

在'scrollView'里面使用'recyclerView'会影响性能吗? –

+1

如果你实施得好,它不应该。 –

scrollview下方用于禁用滚动,如显示布局中的所有项目。像这样的东西可能会奏效:

public class NoScrollRecycler extends RecyclerView { 

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

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

    public NoScrollRecycler(Context context, AttributeSet attrs, int style){ 
     super(context, attrs, style); 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev){ 

     //Ignore scroll events. 
     if(ev.getAction() == MotionEvent.ACTION_MOVE) 
      return true; 

     //Dispatch event for non-scroll actions, namely clicks! 
     return super.dispatchTouchEvent(ev); 
    } 
} 

使用这样的方式:

<com.example.custom.NoScrollRecycler 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/color_white"/>