【问题标题】:Using RecyclerView with StaggeredGridLayoutManager not showing anything使用带有 StaggeredGridLayoutManager 的 RecyclerView 不显示任何内容
【发布时间】:2014-11-02 19:00:45
【问题描述】:

我正在尝试使用 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"/>

【问题讨论】:

    标签: android android-recyclerview staggered-gridview


    【解决方案1】:

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

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

    编辑更新的问题

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多