android: ScrollView 内的 RecyclerView

Posted

技术标签:

【中文标题】android: ScrollView 内的 RecyclerView【英文标题】:android: RecyclerView inside a ScrollView 【发布时间】:2014-10-20 08:58:38 【问题描述】:

我有一个 RecyclerView 包裹在一个 LinearLayout 中,它可以按预期完美运行。我可以看到RecyclerView 中的所有数据都已填充。到目前为止一切顺利。

当我将LinearLayout 包装在ScrollView 中时,RecyclerView 变为空白。我在RecyclerView 里面看不到任何东西。为什么?如何完成这项工作。

该页面是ViewPagerIndicator 中的选项卡之一,因此该选项卡中的所有内容都需要在ScrollView 中。

感谢大家的帮助。

【问题讨论】:

你找到答案了吗? 试用:***.com/questions/27083091/… 您应该必须使用一个子滚动视图,而您的 xml 的其他视图将在该子视图中。要使 recyclerView 与滚动视图一起使用,您必须在 xml 中为您的 recyclerview 提供 0dp 高度,并提供您的 recyclerview 在运行时可以采用的最大高度。在垂直 recyclerView 的情况下,您可以通过将总行数 * 一行的高度(以 dp 为单位)相乘来计算最大高度,而在水平方向上,您只能给出一个孩子的高度。就像我们有 10 个 40dp 的 textview,那么垂直 recyclerView 高度将是 10*40 dp = 400dp 和 10dp 水平。 【参考方案1】:

为 ScrollView 设置此属性,

 android:fillViewport="true"

ScrollView 将自行扩展以填充内容

【讨论】:

它对我有用,但有时会发生 NullPointerException。 如果您能提供堆栈跟踪,我将不胜感激。 不要和fitsSystemWindows="true" 伙计们混淆【参考方案2】:

检查实施后,原因似乎如下。如果RecyclerView 被放入ScrollView,那么在测量步骤期间,它的高度是未指定的(因为ScrollView 允许任何高度),因此,它等于最小高度(根据实现),这显然是零。

您有几个选项可以解决此问题:

RecyclerView设置一定的高度 将ScrollView.fillViewport 设置为true 或将RecyclerView 保留在ScrollView 之外。我认为,这是迄今为止最好的选择。如果RecyclerView 的高度不受限制——当它被放入ScrollView 时就是这种情况——那么所有适配器的视图在垂直方向上都有足够的位置并且一次被创建。不再有视图回收,这有点违反RecyclerView 的目的。

【讨论】:

@beworker 我有 2 个RecyclerViews,即使我给出了一定的高度,它们在横向时也不会全部可见,所以 RecyclerViewScrollView 变得必要 完美点。所以 ScrollView 里面的 recyclerView 可以换成一些静态视图容器。【参考方案3】:

除此之外没有任何帮助:

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() 
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) 
        int action = e.getAction();
        switch (action) 
        case MotionEvent.ACTION_MOVE:
            rv.getParent().requestDisallowInterceptTouchEvent(true);
            break;
    
    return false;


@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) 



@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) 

    
);

我得到了这个答案there。谢谢Piyush Gupta。

【讨论】:

我遇到了类似的问题。我在 Recyclerview 项目中使用 Recyclerview。内部 Recyclerview 根本没有滚动。你的解决方案对我有用。【参考方案4】:

希望这会有所帮助:

将此行添加到您的 recyclerView xml 中:

android:nestedScrollingEnabled="false"

试一试,recyclerview会在scrollview内以灵活的高度平滑滚动。

【讨论】:

以上是关于android: ScrollView 内的 RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView 内的 Android WebView 仅滚动滚动视图

ScrollView 内的多个 ListView

Android:使锚链接在 ScrollView 内的 WebView 中工作

解决Android中,禁止ScrollView内的控件改变之后自动滚动 - 转

如何从 ScrollView 内的 RecyclerView 中移除焦点?

ScrollView 内的视图并没有占据所有位置