Androidリストビューに連絡先アプリと同じようにいくつかのセクションヘッダーを描画したい。リストビューをドラッグすると、セクションヘッダーが平らに移動します。ありがとうございます。
この Android – ListViewsのセクション化されたヘッダー の例を見てください。リストビューにセクション化されたヘッダーを実装する方法がわかりやすく説明されています。
そして
Jeff SharkeyのSeparatedListAdapter
ありがとう。
リストアイテムレイアウトにヘッダーレイアウトを作成します。 HEADER LAYOUTの表示と非表示を切り替えるには、VISIBILITYオプションを使用します。これはセクションヘッダーのように機能します。
アダプターの「getView」メソッドで、「名前フィールド(名前に従って表示している場合)」の最初の文字を、前のリスト項目「名前フィールド」の最初の文字で確認します。ヘッダーレイアウトを非表示にする場合(テキストビューで)、それ以外の場合は、ヘッダーテキストにヘッダーレイアウトを表示し、名前フィールドの最初の文字を表示します。
これがコードです
文字列nameFirstLetter = "A"; //これをgetView内ではなくグローバルに宣言します。
// getView文字列の内部nameF = Name.slice(0,1);
if(!nameFirstLetter.equals(nameF )){
nameFirstLetter = nameF ;
holder.headerText.setText(nameFirstLetter );
holder.headerLayout.setVisibility(View.VISIBLE);
}else{
holder.headerLayout.setVisibility(View.GONE);
}
これは、Androidリストビューでセクションヘッダーを表示する最も簡単な方法ですが、iPhoneセクションヘッダーのように機能しません。セクションヘッダーは、上下にスクロールすると他のリストアイテムと共に非表示になります。
Androidでこの問題を解決できるいくつかの例を見つけました:PinnedHeaderListViewの例を見つけてください Pinned Header ListViewの例
誰かが別のソリューション、特にiOS開発に慣れているソリューションを必要としている場合、それを好む場合、またはiOSのルックアンドフィールをエミュレートしたい場合。私は以下をお勧めします:
http://applidium.com/en/news/headerlistview_for_Android/
ロジックはiOSと同じであり、ほとんどのレッグワークを実行します
SectionedMergeAdapter を確認できます。データのサブリストが複数ある場合は、それらを結合してヘッダーを付けることができます。
コード例-
ListView listView = (ListView) findViewById(Android.R.id.list);
ArrayAdapter<Integer> adapter1 =
new ArrayAdapter<>(this, R.layout.item_list, Android.R.id.text1, arrayList1);
ArrayAdapter<Integer> adapter2 =
new ArrayAdapter<>(this, R.layout.item_list, Android.R.id.text1, arrayList2);
ArrayAdapter<Integer> adapter3 =
new ArrayAdapter<>(this, R.layout.item_list, Android.R.id.text1, arrayList3);
TextView tv1 = new TextView(this);
tv1.setText("Header 1");
TextView tv2 = new TextView(this);
tv2.setText("Header 2");
TextView tv3 = new TextView(this);
tv3.setText("Header 3");
SectionedMergeAdapter adapter = new SectionedMergeAdapter();
adapter.addSection(new SectionedMergeAdapter.Section(tv1, adapter1));
adapter.addSection(new SectionedMergeAdapter.Section(tv2, adapter2));
adapter.addSection(new SectionedMergeAdapter.Section(tv3, adapter3));
listView.setAdapter(adapter);