2

Pinterest のずらしたレイアウトのようなものを構築するために RecyclerViews を試しています。ただし、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"/>
4

1 に答える 1

6

サンプルでは、​​StaggeredGrid を水平に設定していますが、Grid を垂直に設定しています。指定された HEIGHT と変数 WIDTH を指定したときにアイテム ビューが適切に測定できない場合、これが問題になる可能性があります。

アダプターとアイテム ビューのコードを追加していただければ、問題の原因を突き止めることができます。

更新された質問の編集

StaggeredGridLM (水平の場合) は現在、正確な高さと無限の幅で子を測定します。設定しているレイアウト パラメータは無視されるため、ここでは役に立ちません。将来のリリースでは、スクロール方向の値の読み取りを開始しますが、他の方向は重力サポートを導入するまで同じままです。

HiveView の onMeasure メソッドを修正することでバグを修正できます。

于 2014-11-03T20:49:38.927 に答える