android:RecyclerView在ScrollView中

时间:2014-08-26 22:04:06

标签: android viewpagerindicator android-recyclerview

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

当我将LinearLayout包裹在ScrollView中时,RecyclerView会变为空白。我在RecyclerView内没有看到任何内容。为什么?如何使这项工作。

该页面是ViewPagerIndicator中的其中一个标签,因此该标签中的所有内容都必须位于ScrollView

感谢您的帮助。

5 个答案:

答案 0 :(得分:36)

为ScrollView设置此属性

 android:fillViewport="true"

ScrollView将扩展自己以填充内容

答案 1 :(得分:22)

检查实施后,原因如下。如果将RecyclerView放入ScrollView,则在测量步骤中,其高度未指定(因为ScrollView允许任何高度),因此,等于最小高度(根据实施情况) )这显然是零。

您有几种方法可以解决此问题:

  • 将某个高度设置为RecyclerView
  • ScrollView.fillViewport设为true
  • 或将RecyclerView保留在ScrollView之外。我认为,这是迄今为止最好的选择。如果RecyclerView高度不受限制 - 当它被放入ScrollView时就是这种情况 - 那么所有适配器的视图都有足够的垂直位置并且一次创建。没有任何视图可以回收,这有点打破了RecyclerView
  • 的目的

答案 2 :(得分:4)

除此之外没有任何帮助:

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

答案 3 :(得分:0)

希望这个帮助

将此行添加到recyclerView xml:

android:nestedScrollingEnabled="false"

尝试一下,recyclelerview将在scrollview内以灵活的高度平滑滚动。

答案 4 :(得分:0)

在ScrollView中使用RecyclerView不是一个好习惯。

  

当RecyclerView包装其内容时,它不再循环使用了。只要RecyclerView位于布局层次结构中,数据集中的每条记录都有一个项目视图保留在内存中。

在此处阅读更多内容 - https://android.jlelse.eu/android-dev-tip-4-91b7757b1f0a