gpt4 book ai didi

android - 将 RecyclerView 与 StaggeredGridLayoutManager 一起使用不显示任何内容

转载 作者:行者123 更新时间:2023-11-29 14:48:34 26 4
gpt4 key购买 nike

我正在尝试使用 RecyclerViews 构建类似于 Pinterest 的交错布局。但是,虽然 LinearLayoutMnager 和 GridLayoutManager 在同一代码中都运行良好,但将其替换为 StaggeredGridLayoutManager 不会显示任何项目。在代码中放置断点表明它获取了项目计数和项目,但未呈现任何内容。知道我缺少什么吗?

final RecyclerView rView = (RecyclerView) findViewById(R.id.app_list);
rView.setClickable(true);
rView.setHasFixedSize(true);
rView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL));
rView.setAdapter(new ItemListAdapter(this, getItems()));

仅用 GridLayoutManger 替换 StaggeredGridLayoutManager 一切正常。

rView.setLayoutManager(new GridLayoutManager(this, 5));

适配器如下:

private static class ItemListAdapter extends RecyclerView.Adapter<ItemViewHolder> {
private final LayoutInflater mInflater;
private final ArrayList<ItemDetail> mList;

public ItemListAdapter(Context context, ArrayList<ItemDetail> list) {
mInflater = LayoutInflater.from(context);
mList = list;
}

@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int position) {
final View view = mInflater.inflate(R.layout.item_blob, parent, false);
return new ItemViewHolder(view);
}

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
holder.hive.showDrawable(mList.get(position).icon);
}

@Override
public int getItemCount() {
return mList.size();
}
}

下面是ViewHolder

private static class ItemViewHolder extends RecyclerView.ViewHolder {
public final HiveView hive;

public ItemViewHolder(View view) {
super(view);
this.hive = (HiveView) view;
}
}

最后是项目布局

<?xml version="1.0" encoding="utf-8"?>
<com.bidyut.app.hivelauncher.widget.HiveView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/app_blob_size"
android:layout_height="@dimen/app_blob_size"
android:background="@android:color/holo_red_light"/>

最佳答案

在您的示例中,您将 StaggeredGrid 设置为水平但 Grid 为垂直。如果您的项目 View 在给定指定的高度和可变宽度时无法正确测量自己,这可能会变成一个问题。

如果您可以为您的适配器和项目 View 添加代码,我们就可以找出问题所在。

编辑更新问题

StaggeredGridLM(水平时)当前测量具有精确高度和无限宽度的子项。您设置的布局参数在这里没有帮助,因为它们被忽略了。在未来的版本中,它将开始读取滚动方向的值,但其他方向将保持不变,直到我们引入重力支持。

您可以通过修复 HiveView 中的 onMeasure 方法来修复此错误。

关于android - 将 RecyclerView 与 StaggeredGridLayoutManager 一起使用不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26703123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com