web-dev-qa-db-ja.com

iOSのUITableviewのように、セクションヘッダーをAndroid listviewで描画する方法は?

Androidリストビューに連絡先アプリと同じようにいくつかのセクションヘッダーを描画したい。リストビューをドラッグすると、セクションヘッダーが平らに移動します。ありがとうございます。

15
stream

この Android – ListViewsのセクション化されたヘッダー の例を見てください。リストビューにセクション化されたヘッダーを実装する方法がわかりやすく説明されています。

そして

Android-amazing-listview

Jeff SharkeyのSeparatedListAdapter

CommonsWareのMergeAdapter

ありがとう。

19
user370305

リストアイテムレイアウトにヘッダーレイアウトを作成します。 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セクションヘッダーのように機能しません。セクションヘッダーは、上下にスクロールすると他のリストアイテムと共に非表示になります。

12
Jashan PJ

Androidでこの問題を解決できるいくつかの例を見つけました:PinnedHeaderListViewの例を見つけてください Pinned Header ListViewの例

3
Phuong

誰かが別のソリューション、特にiOS開発に慣れているソリューションを必要としている場合、それを好む場合、またはiOSのルックアンドフィールをエミュレートしたい場合。私は以下をお勧めします:

http://applidium.com/en/news/headerlistview_for_Android/

ロジックはiOSと同じであり、ほとんどのレッグワークを実行します

3
luke-009

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);
0
jaibatrik