问题标签 [staggeredgridlayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
990 浏览

android - 为什么 RecyclerView 在第一个项目上方滚动太多并且在滚动时闪烁?

编辑:问题解决了!!

滚动时我的RecyclerView闪烁。单屏有5-6个项目。当我向下滚动时,屏幕闪烁并且滚动条跳回到RecyclerView. 现在,如果我再次向上滚动,则ReccyclerView滚动到第一项上方太多了。如果我非常快速地重复上下滚动过程,回收站视图会完全向下滚动,只留下一个空白背景。在那之后,如果我滚动任何一种方式,什么都不会出现。此后,Scroller 不再工作。

我正在使用Lucasr Two Way View. 我正在讨论的问题也在RecyclerView.Adapter 和 UIL 的一些奇怪但尚未解决。我的 20 多张图片RecyclerView,可以增加。每个图像的大小大于 100kb。

为了加载图像,我尝试Universal Image Loader(UIL)启用缓存。但这没有帮助。闪烁持续存在UIL。我也测试过,GLIDE但问题仍然存在。

为了更清楚,这里是我的ADM. <code>RecyclerView</code> 滚动问题时闪烁。

这是我的持有人课程:

}

以下是我将适配器设置为 RecyclerView 的方式:

0 投票
3 回答
3547 浏览

android - 如何从 StaggeredGridLayoutManager 中查找单元格宽度?

我有一个StaggeredGridRecyclerView我正在尝试动态设置onBindViewHolder. 我认为StaggeredGrid应该自动处理所有这些,所以我设置android:layout_width="match_parentandroid:scaleType="fitStartImageView但图像周围有很多空白。

由于StaggeredGrid不符合要求,我试图通过在onBindViewHolder. 我提前知道了图像的宽度和高度,但网格的单元格宽度不可用。我试过holder.cardView.getLayoutParams().widthand getMeasuredWidth(),但它们都返回零或小数字。我知道还有其他地方可以使用单元格宽度,但我真的需要它onBindViewHolder以便我可以设置和调整图像。

关于如何通过利用来实现这一点的任何想法StaggeredGrid?任何建议或经验表示赞赏!

在我的活动中是这样的:

在我的适配器中:

在我的布局中:

我还尝试添加它,它确实给了我单元格宽度,但是在onGlobalLayout事件中设置和调整图像后,事件会被触发,onBindViewHolder所以为时已晚。

这是由于各种图像尺寸而随机出现的间隙。我想要的是所有图像都是单元格的宽度,并让图像和单元格的高度动态调整:

在此处输入图像描述

0 投票
1 回答
639 浏览

android - 异步图像下载到 StaggeredGridLayout

我有一个指向具有不同尺寸的图像的 URL 列表。我想在交错的垂直网格中显示它们,拉伸每个图像的宽度以占据单行并拉伸高度以环绕缩放的图像。一切都应该是这样的:

http://www.technotalkative.com/wp-content/uploads/2014/04/staggered-gridview-in-android.png

我正在使用 RecycleView 和 StaggeredGridLayoutManager。不幸的是,我无法让它正常工作。

这是我要展示的项目的类别:

项目的相应 XML:

适配器:

以及调用所有内容的片段:

前几张图像看起来不错,但是当我向下滚动时,所有图像都开始显示在单列中。然后,当我滚动到列表的绝对顶部时,所有内容都放在一起,图像显示在两列中,直到我向下滚动到我尚未下载的图像。问题是我在下载之前不知道每个图像的大小,所以我不能提前设置每个项目的大小。

希望有人以前遇到并解决过这个问题,或者只是比我更了解这个问题,并且可以帮助我让它工作。

我还尝试了 Etsy 的 Staggered GridView,得到了类似甚至更差的结果。

0 投票
1 回答
893 浏览

android - 如何控制 Scroll StaggeredGrid RecyclerView 上的 SwipeRefreshLayout 和 Endless Fuction?

我尝试将 StaggeredGrid RecyclerView 与 Endless 和 SwipeRefreshLayout 结合使用。但我的代码有问题:

上面的代码,我得到问题:

  1. 在无尽的位置,getMoreNewsFromServer();总是被调用(正常:一个被调用)。

  2. 在无限位置,调用 mSwipeRefreshLayout

如果我使用 Listview,它的工作方式是这样的:

那么如何解决呢?

0 投票
1 回答
3191 浏览

android - 方向更改后如何防止在 StaggeredGridLayoutManager 中重新排序项目?

我知道这个问题听起来与 StackOverflow 上的其他问题相似,但这是关于方向改变后发生的具体情况。

我有一个带有工具栏和 RecyclerView 的活动。我使用具有垂直方向和 3 列的 StaggeredGridLayoutManager 来填充 RecyclerView。项目布局是一个包含 ImageView 和 TextView 的 LinearLayout。

图片是从网上加载的。我知道 ViewHolders 绑定之前的图像大小。所以我在 onBindViewHolder 中设置了图像高度,以防止项目重新排序并通过毕加索加载图像:

假设我的适配器中有 50 个项目。我处于纵向模式并向下滚动 20 个项目。然后我切换到横向模式。我现在创建了一个有 4 列的新 StaggeredGridLayoutManager,所以比纵向模式多一列。我重新计算图像高度以适应新的目标宽度并在布局上设置保存状态,如下所示:

网格会自动滚动到所需的存储位置。现在我向上滚动。由于新的图像尺寸,“滚动位置上方的空间”不能完全被图像填充。所以项目会重新排序,但大多数时候网格顶部仍然或多或少有很大的差距(请参阅底部的屏幕截图链接)。当我飞到顶部时,这是最糟糕的。那么在这种情况下有没有办法防止重新排序和差距?

纵向模式在第一次加载时显示屏幕。

横向模式在方向更改后向上滚动时显示屏幕。左边的图像几乎是透明的,因为我猜是自定义的动画淡入淡出。我从示例代码中删除了它以使其更小。

编辑:

我刚刚意识到在方向更改后所有项目都在屏幕顶部对齐。虽然看起来不错,但如果回收站视图顶部的对齐方式正确,我会更喜欢。

0 投票
1 回答
3385 浏览

android - 如何设置交错网格跨度计数以使用可用的屏幕宽度?

我正在使用垂直的 StaggeredGridLayoutManager 来显示一些缩略图。每行包含一个宽度为 1 英寸、高度为 150dp 的卡片视图。我的问题是如何设置交错网格跨度计数以使用屏幕的可用物理宽度?

CardViewRow.xml

目前我正在使用此代码。(学分:mstrengis)

/* 这在我的 nexus 5 和三星标签上完美运行,但在我的联想手机上,卡宽度小于 1.5 厘米,跨度数超出我的预期。*/

0 投票
2 回答
8191 浏览

android - RecyclerView onCreateViewHolder 返回类型与多个自定义 ViewHolder 不兼容

我试图在 RecyclerView 中使用多个 ViewHolders 以便在运行时交换这些视图。我创建了两个扩展 RecyclerView.ViewHolder 的类:

MenuItemViewHolder

SelectedItemViewHolder

它们在我的 RecyclerViewAdapter 类的 onCreateViewHolder 函数中调用:

RecyclerViewAdapter onCreateViewHolder

当我尝试运行代码时,出现此错误:

错误:(48, 36) 错误:RecyclerViewAdapter 中的 onCreateViewHolder(ViewGroup,int) 无法覆盖 Adapter 返回类型中的 onCreateViewHolder(ViewGroup,int) ViewHolder 与 VH 是类型变量的 MenuItemViewHolder 不兼容:VH 扩展了在类 Adapter 中声明的 ViewHolder

所以,问题似乎是 onCreateViewHolder 不接受我的自定义类是从 RecyclerView.ViewHolder 继承的。我正在使用 Android Studio,所以问题可能就在那里。我很困惑,因为我认为 Java 继承可以毫无问题地处理这个问题。有人可以提出解决方案吗?

编辑:当我将 onCreateViewHolder 的返回类型更改为只有一个 VH 的 MenuItemViewHolder 时,一切正常。但是,当我有多个可以随时交换的 VH 类时,这不起作用。

0 投票
1 回答
299 浏览

android - 如何为 StaggeredGridLayoutManager 保留 spanindex

我将 RecyclerView 与 StaggeredGridLayoutManager 用于 2 SpanCount。每个项目都有以下布局。

默认情况下,TextView (id/feed_caption) 是不显示的,它会在单击项目时显示。目前,显示会导致附近的项目更改spanindex,从而导致recyclerview的布局发生非常复杂的变化。(我正在尝试添加动画)。

我想要实现的是所有项目都保留在自己的 spanindex 中。我搜索并没有找到一种方法。你能就任何事情提出建议吗?谢谢。

[编辑]尝试添加动画来解释问题。(如果可能,请帮助让它可以直接显示在stackoverflow上)问题动画

0 投票
3 回答
8676 浏览

android - Variable number of columns in GridLayoutManager

I wanted to display variable number of columns in a row of GridLayoutManager while using RecyclerView. The number of columns to be displayed depends on the size of the column's TextView.

I don't know the column width as the text is being dynamically put in it.

Can anyone help? StaggeredGridLayoutManager is not solving my purpose as it customizes the height but takes fixed number of columns.

0 投票
1 回答
3905 浏览

android - 将 setSpanSizeLookup 与 StaggeredGridLayoutmanager 一起使用

当我尝试将 setSpanSizeLookup 与 GridLayoutManager 一起使用时,它可以正常工作。但是,使用与 StaggeredGridLayoutManager 相同的 setSpanSizeLookup 会出错。这显然不是一个有效的课程。有什么方法可以将 setSpanSizeLookup 与 StaggeredGridLayoutManager 一起使用,或者您能否建议一种替代解决方案来实现相同的结果?

这是我使用 setSpanSizeLookup 和 GridLayoutManager 的方式 -

本质上,我想将第一项的跨度大小设置为最大值,并将后续行设置为一半。有任何想法吗?