teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

リンク修正

2020/06/08 21:28

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -70,4 +70,4 @@
70
70
  }
71
71
  ```
72
72
 
73
- あとは普通の RecyclerView ですね。見出しと項目はそれぞれ [layout_title](https://github.com/takapro/SectionGrid/blob/master/app/src/main/res/layout/layout_title.xml) と [layout_item](https://github.com/takapro/SectionGrid/blob/master/app/src/main/res/layout/layout_item.xml) で作ってますので、必要に応じて修正してください。
73
+ あとは普通の RecyclerView ですね。見出しと項目はそれぞれ [layout_header](https://github.com/takapro/SectionGrid/blob/master/app/src/main/res/layout/layout_header.xml) と [layout_item](https://github.com/takapro/SectionGrid/blob/master/app/src/main/res/layout/layout_item.xml) で作ってますので、必要に応じて修正してください。

1

リンク追加

2020/06/08 21:28

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  ListView よりも RecyclerView と GridLayoutManager を組み合わせて使った方がいいと思います。
2
2
  [サンプルプロジェクト](https://github.com/takapro/SectionGrid) を作ってみたのでご覧ください。以下、解説します。
3
3
 
4
- まず MainActivity より、
4
+ まず [MainActivity](https://github.com/takapro/SectionGrid/blob/master/app/src/main/java/com/example/sectiongrid/MainActivity.java) より、
5
5
 
6
6
  ```java
7
7
  List<String> sectionTitles = new ArrayList<>();
@@ -28,7 +28,7 @@
28
28
  GridLayoutManager というのを使うと横にいくつ項目を並べるかを指定できます。また、SpanSizeLookup を設定すると、項目ごとの横幅を指定できますので、見出しの場合は横いっぱいに表示するようにしています。
29
29
  参考: [android - RecyclerView GridLayoutManager with full width header - Stack Overflow](https://stackoverflow.com/questions/37642869/recyclerview-gridlayoutmanager-with-full-width-header)
30
30
 
31
- 次に SectionGridAdapter ですが、RecyclerView の Adapter は (某 iOS の TableView と違って) 単なる 1 次元配列を想定しているので、例えば以下のようなデータの場合、まず getItemCount で合計項目数 (count = 9) を計算する必要があります。また、Adapter のメソッドは 0 〜 count - 1 の position の値を使って呼ばれるので、それがどのセクションの何番目の項目かを getSectionItemIndex で計算しています。
31
+ 次に [SectionGridAdapter](https://github.com/takapro/SectionGrid/blob/master/app/src/main/java/com/example/sectiongrid/SectionGridAdapter.java) ですが、RecyclerView の Adapter は (某 iOS の TableView と違って) 単なる 1 次元配列を想定しているので、例えば以下のようなデータの場合、まず getItemCount で合計項目数 (count = 9) を計算する必要があります。また、Adapter のメソッドは 0 〜 count - 1 の position の値を使って呼ばれるので、それがどのセクションの何番目の項目かを getSectionItemIndex で計算しています。
32
32
 
33
33
  ```
34
34
  ├── Section 1 position = 0 index = [0]
@@ -70,4 +70,4 @@
70
70
  }
71
71
  ```
72
72
 
73
- あとは普通の RecyclerView ですね。見出しと項目はそれぞれ layout_title と layout_item で作ってますので、必要に応じて修正してください。
73
+ あとは普通の RecyclerView ですね。見出しと項目はそれぞれ [layout_title](https://github.com/takapro/SectionGrid/blob/master/app/src/main/res/layout/layout_title.xml)[layout_item](https://github.com/takapro/SectionGrid/blob/master/app/src/main/res/layout/layout_item.xml) で作ってますので、必要に応じて修正してください。