【发布时间】:2018-05-16 13:58:52
【问题描述】:
我正在开发的应用程序包含大量列表视图。在一种情况下,我有一个 recyclerView,它利用 GridLayoutManager 创建一个两列视图。就适配器而言,我还没有使用过 recyclerViews,但这是我遇到的问题。尽管具有适当的 wrap_content 属性,但视图中的每个项目都被调整为相同的高度。我想我的问题是,在每个子元素具有不同高度的情况下,是否有一个技巧可以解决这个问题? recyclerView 是否在幕后发生了某些事情,导致所有子元素具有最高子元素的固定高度?这听起来像是视图持有者的回收器问题吗?
我的适配器逻辑如下
public ClubViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.onboard_club, parent, false);
return new ClubViewHolder(itemView, mRecyclerClickListener);
}
public void onBindViewHolder(final ClubViewHolder holder, int position) {
Item club = clubList.get(position);
if (null != club) {
holder.clubTitleText.setText(club.getName());
holder.subtitleText.setText(context.getResources().getString(R.string.club_members,club.getNumberMembers()+""));
// Do some imageView logic here
}
}
我需要在这里以编程方式设置高度吗?
编辑:为了进一步澄清,我膨胀的布局是这里有问题的布局。它是一个包含一个 imageView 和两个文本视图的 Vertical LinearLayout。我需要 LinearLayout 来包装子 XML 属性,但它目前没有这样做,尽管 LL 的高度为 wrap_content 并且所有子高度也设置为 wrap_content
解决方案:解决方案由以下用户发布。我会将更新留在这里,以供将来苦苦挣扎的人使用。
- 我需要的布局:两列的子级高度不同
- 像往常一样用适配器将其连接起来。
- 在 recyclerView 小部件上设置 StaggeredGridLayoutManager
- 在管理器构造函数中传入 2 的 spanCount 和 Vertical 的方向
- 轰,关闭冲刺票,忘记它
再次感谢 Stack 社区,干杯!
【问题讨论】:
-
或者你可以通过
int viewType用不同的子布局来膨胀不同的布局 -
@Warrocker 为什么我要膨胀不同的布局?它们的样式完全相同,只是其中一些具有换行到新行的文本行,该行将其下方的内容向下推,因此我只需要父容器(在本例中为 LinearLayout)来扩展。我将容器的高度设置为包装内容
标签: android android-recyclerview