2014-11-02 40 views
1

我正在尝试使用RecyclerViews来构建类似Pinterest交错布局的东西。但是,尽管LinearLayoutMnager和GridLayoutManager在相同的代码中都能正常工作,但用StaggeredGridLayoutManager替换它并不显示任何项目。在代码中放置断点表明它获取了项目数量和项目,但是没有任何渲染。任何想法我缺少什么?使用RecyclerView和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"/> 

回答

5

在您的样品,你正在设置StaggeredGr id横向但网格垂直。如果您的商品视图无法在指定HEIGHT和可变WIDTH时正确测量自身,则可能会导致问题。

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

编辑更新的问题

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

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

+0

我已经使用您请求的信息编辑了原始问题。 – bidyut 2014-11-06 18:09:48

+0

就是这样!谢谢! – bidyut 2014-11-10 16:49:11