2014-11-02 5 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())); 

Замена StaggeredGridLayoutManager только GridLayoutManger - все работает.

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, это может стать проблемой.

Если вы можете добавить код для своего адаптера &, то мы сможем выяснить, в чем проблема.

Edit для обновления вопроса

StaggeredGridLM (при горизонтальном) в настоящее время измеряет ребенок с точной высотой и бесконечной шириной. Параметры макета, которые вы устанавливаете, здесь не помогают, поскольку они игнорируются. В следующем выпуске он начнет считывать значение для направления прокрутки, но другое направление останется неизменным до тех пор, пока мы не введем гравитационную поддержку.

Вы можете исправить ошибку, установив метод onMeasure в свой HiveView.

+0

Я редактирую исходный вопрос с запрошенной вами информацией. – bidyut

+0

Вот и все! Благодаря! – bidyut

Смежные вопросы