Использование RecyclerView с StaggeredGridLayoutManager ничего не показывает

Я пытаюсь использовать 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()));

Заменив 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"/>

person bidyut    schedule 02.11.2014    source источник


Ответы (1)


В ваших примерах вы устанавливаете StaggeredGrid горизонтально, а Grid вертикально. Если ваши представления элементов не могут правильно измерить себя при заданной высоте и переменной WIDTH, это может превратиться в проблему.

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

Изменить для обновленного вопроса

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

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

person yigit    schedule 03.11.2014