0

私はArrayListいくつかのデータを持っています。ArrayListさまざまなカテゴリのオブジェクト (猫 1、猫 2、猫 3、...) が含まれます。にリストを表示したいGridView

私のxmlは次のようになります:

 <GridView
                android:id="@+id/gv_my_grid"
                style="@style/fill_wrap"
                android:cacheColorHint="@null"
                android:layout_margin="10dp"
                android:numColumns="3"
                android:listSelector="@android:color/transparent"
                android:stretchMode="columnWidth"
                android:gravity="center"
                />

そして、すべてがうまく機能します。

GridView は次のようになります。

|item 1 (cat 1)| |item 2 (cat 1)| |item 3 (cat 1)|
|item 4 (cat 1)| |item 5 (cat 2)| |item 6 (cat 2)|
|item 7 (cat 3)| |item 8 (cat 3)| |item 9 (cat 3)|

しかし、今では、異なるカテゴリ項目の間に全幅の水平区切り線を配置したいと考えています。次のようになります。

___________category_1_____________________________
|item 1 (cat 1)| |item 2 (cat 1)| |item 3 (cat 1)|
|item 4 (cat 1)| 
___________category_2_____________________________
|item 5 (cat 2)| |item 6 (cat 2)|
___________category_1_____________________________
|item 7 (cat 3)| |item 8 (cat 3)| |item 9 (cat 3)|

これは可能ですか?私が見つけたすべての原因 -ListView実装のみ。

編集:

アダプターのコードを追加するように求められました。getViewメソッドで十分だと思います。

public View getView(int position, View view, ViewGroup viewGroup) {
        final Holder holder;
        final View cell;
        if (null == view) {
            cell = this.inflater.inflate(R.layout.gi_my_item, null);
            holder = new Holder(cell);
            cell.setTag(holder);
        } else {
            cell = view;
            holder = (Holder) cell.getTag();
        }
        holder.item = this.items.get(position);
        holder.textField.setText(holder.item.someText);
        return cell;
    }
4

2 に答える 2

1

RecyclerViewwithを使用して操作できることがわかりましたGridLayoutManager

これを行うコードは次のとおりです。

GridLayoutManager manager = new GridLayoutManager(this, 3);

これにより、3 つの列を持つグリッドが作成されます。

メソッドを使用setSpanSizeLookup()してコールバックを設定し、各項目の列範囲を返します。

manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                return (elementsAdapter.getItemViewType(position) == VIEW_HEADER) ? 3 : 1;
            }
        });

ヘッダータイプの場合、3列スパンになります。

また、 の 2 つを作成する必要があり、 のアイテム ビューとヘッダー ビューとは異なるRecyclerView.ViewHolder使用が必要になります。getItemViewType()RecyclerView.Adapter

そのためのサンプルコードをいくつか作成しました。
https://github.com/j796160836/GridLayoutManagerDemo


参考:
https ://medium.com/android-bites/grid-layout-with-header-3f2966181c4d

于 2015-05-07T07:12:17.973 に答える