我正在尝试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设置为垂直。如果在给定指定的HEIGHT和变量WIDTH的情况下,项目视图无法正确衡量自身,则可能会出现问题。
如果您可以为适配器和项目视图添加代码,我们可以找出问题所在。
编辑更新的问题
StaggeredGridLM(水平时)当前以精确的高度和无限的宽度测量子级。您正在设置的布局参数在这里没有帮助,因为它们被忽略了。在将来的版本中,它将开始读取滚动方向的值,但其他方向将保持不变,直到我们引入重力支撑为止。
您可以通过在HiveView中修复onMeasure方法来修复该错误。
关于android - 与StaggeredGridLayoutManager一起使用RecyclerView不显示任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26703123/