安卓:ScrollView 内部的 RecyclerView

14

我有一个被LinearLayout包装的RecyclerView,它按预期完美地工作。我可以看到所有RecyclerView中填充的数据。目前为止一切正常。

但是,当我将LinearLayout包装在ScrollView中时,RecyclerView变为空白。我看不到任何内容在RecyclerView内。为什么?如何使其正常工作。

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

感谢您的所有帮助。


1
你有找到答案吗? - athor
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Fabin Paul
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Vatish Sharma
4个回答

36

为 ScrollView 设置此属性,

 android:fillViewport="true"

ScrollView会自动延伸以填满其内容


它对我有效,但有时会出现NullPointerException。 - SilentKnight
1
如果您能提供一个堆栈跟踪,我将不胜感激。 - Sathesh
1
不要混淆 fitsSystemWindows="true" 的含义。 - Jemshit Iskenderov

23

经过检查实现,原因似乎是这样的。如果将RecyclerView放入ScrollView中,则在测量步骤期间它的高度未指定(因为ScrollView允许任何高度),因此结果等于最小高度(根据实现)即零。

您有几个修复选项:

  • RecyclerView设置特定高度
  • ScrollView.fillViewport设置为true
  • 或将RecyclerView保持在ScrollView之外。 在我看来,这绝对是最好的选择。 如果未限制RecyclerView的高度-即当它放入ScrollView中时-则所有适配器视图在垂直方向上都有足够的位置并立即创建。 不再进行视图回收,这有点破坏了RecyclerView的目的。

@beworker 我有2个RecyclerView,即使我给定了一定的高度,在横屏模式下它们也不会全部可见,因此在ScrollView中放置RecyclerView是必要的。 - Jemshit Iskenderov
完美的点。因此,ScrollView中的recyclerView可以被一些静态视图容器替换。 - dasar

7

除此之外,没有任何东西能帮助我:

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) {

    }
});

我在这里找到了答案 (链接)。感谢Piyush Gupta


1
我曾经遇到过类似的问题。我在Recyclerview项中使用了另一个Recyclerview。内部的Recyclerview根本无法滚动。你的解决方案对我很有帮助。 - Khawar Raza

0
希望这可以帮到你:
将以下代码添加到您的recyclerView xml文件中:
android:nestedScrollingEnabled="false"

试一下,recyclerview 将在 scrollview 内以灵活的高度平稳滚动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接