当前位置: 首页 > 知识库问答 >
问题:

使用 ScrollView 内部的回收器视图,具有灵活的回收器项目高度

何烨华
2023-03-14

我想知道是否有任何可能的方法使用RecyclerView?

在此之前,我在ScrollView中使用了具有固定高度的RecyclerView,但这次我不知道项目的高度。

提示:在提出这个问题之前,我阅读了堆栈问题的所有问题和解决方案。

更新:一些解决方案显示了如何自行滚动RecyclerView,但我想显示它已扩展。

共有3个答案

栾昂雄
2023-03-14

使用此行查看您的recyclerview视图:

 android:nestedScrollingEnabled="false"

尝试一下,recyclerview将以灵活的高度平滑滚动

东门俊民
2023-03-14

我在世界各地寻找这个问题的答案,但我没有找到这个流行问题的任何直接答案。最后我混合了一些技巧,解决了这个问题!

我的问题开始于我的老板要求我在ScrollView中使用RecyclerView,正如您所知,我们不能在彼此内部使用两个可滚动对象,除非我们为RecyclerViewer设置或知道固定项目高度。这就是答案:

步骤1:首先,您应该找到您的回收站查看灵活的项目高度,这可以从您的回收站查看

holder.itemView.post(new Runnable() {
        @Override
        public void run() {

            int cellWidth = holder.itemView.getWidth();// this will give you cell width dynamically
            int cellHeight = holder.itemView.getHeight();// this will give you cell height dynamically

            dynamicHeight.HeightChange(position, cellHeight); //call your iterface hear
        }
    });

使用此代码,您可以在它们构建时找到您的项目高度,并通过接口将项目高度发送到您的活动。

对于那些有接口问题的朋友,我在下面留下了接口代码,可以写在适配器中。

public interface DynamicHeight {
    void HeightChange (int position, int height);
}

步骤2:到目前为止,我们找到了项目高度,现在我们想将高度设置为我们的RecyclatorView。首先,我们应该计算项目高度的总和。在此步骤中,我们通过 BitMap 首先实现最后一步接口,并在您的活动或片段中编写以下代码来定义您的 RecyclerView:

@Override
public void HeightChange(int position, int height) {
    itemHeight.put(position, height);
    sumHeight = SumHashItem (itemHeight);

    float density = activity.getResources().getDisplayMetrics().density;
    float viewHeight = sumHeight * density;
    review_recyclerView.getLayoutParams().height = (int) sumHeight;

    int i = review_recyclerView.getLayoutParams().height;
}

int SumHashItem (HashMap<Integer, Integer> hashMap) {
    int sum = 0;

    for(Map.Entry<Integer, Integer> myItem: hashMap.entrySet())  {
        sum += myItem.getValue();
    }

    return sum;
}

第三步:现在我们得到了您的RecyclerView高度的总和。对于最后一步,我们只需将我们在最后一步中编写的接口发送到适配器,代码如下:

reviewRecyclerAdapter = new ReviewRecyclerAdapter(activity, reviewList, review_recyclerView, this);

当你实现接口时,你应该把它和我使用它的上下文一起发送到你的。

尽情享受吧

章青青
2023-03-14

如果您只想滚动,那么您可以使用NestedScrollView而不是ScrollView,因此您可以使用以下方式修改代码

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

            //design your content here with RecyclerView 

    </LinearLayout>

</android.support.v4.widget.NestedScrollView>
 类似资料:
  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 主要活动: 适配器:

  • 我有一个父回收器视图,其中包含一个水平回收器视图作为其项目。在其中,我将显示分类视频。当我开始滚动水平回收器视图时,应用程序崩溃。 错误是: 我的代码是category类 垂直适配器 水平适配器

  • 当点击fab时,snack bar出现,为此我必须使用协调器布局将fab水平移动到snack bar上方。但现在回收器视图的前几个项目是不可见的。它只从项目3开始。能否有人帮助解决这一点和什么改变要做。提前谢谢!!

  • 我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件

  • 我试图实现带有水平滚动的,所以我使用了带有水平方向的。问题是,我使用2种不同类型的项目填充RecyclerView,具有不同的高度。这是我对项目使用的布局: 这是包含的布局,基本上是这样的: 我使用的是一个,我只是更改了两个子视图的可见性。 我希望得到的结果是: 但我得到的是这个;使用第二种物品的高度将CardView切成两半: 我看到了这个帖子,和我的问题差不多,它推荐使用,于是,我尝试实现: