1

を使用して各アイテムの名前と情報を表示するListViewが必要simple_list_item_2なので、次のようになります。

SWITZERLAND
a country with many delicious cheeses

BRITAIN
famous for its clocktower

AUSTRALIA
in Australia, everything is upside down!

大文字のテキストは、各ListView要素の大きな黒いテキストを表すことを意味し、下の大文字のテキストは、その要素の灰色の小さなタイプを表します。

ただし、ユーザーが自分の国を追加できるようにしたいので、最初の要素は次のように表示されます。

ADD NEW COUNTRY...

小さなタイプのテキストなし。小さいテキストを使用simple_list_item_2して単純にに設定できます""が、これにより大きいテキストがぎこちなく整列します。この特別な「新しい国を追加」要素をとまったく同じように見せたいsimple_list_item_1です。

ただし、使用するか、アダプターの初期化で行われるsimple_list_item_1かは、次のように決定されます。simple_list_item_2

MyAdapter adapter = new MyAdapter(
            this,
            android.R.layout.simple_list_item_2, 
            myListOfListViewElements);

そして、この決定は、ListViewにデータを入力すると実現されます。

myListView.setAdapter(adapter);

では、1つのListViewで両方の種類のsimple_list_itemを使用するにはどうすればよいですか?

4

2 に答える 2

0

/を呼び出す前に を呼び出すことaddHeaderView(View view)で、いつでもヘッダービューとして「新しい国を追加」できます。そのヘッダー ビューに onClick リスナーをアタッチして、クリックをキャプチャします。ListViewsetAdapter(adapter)setListAdapter(adapter)

そうすれば、「新しい国を追加」がリストビューの最初のエントリとして表示されます

于 2012-10-31T00:30:33.913 に答える
0

単一の「特別な」アイテムを扱っている特定のケースでは、@dymmehの答えは間違いなく優れた実装の簡単なアプローチです。必ずしも の一番上にある必要のない複数の異なるアイテムを処理する必要がある、より一般的なケースではListView、アダプターで次の 2 つのメソッドを参照できます。

  • getItemViewType(int position)
  • getViewTypeCount()

最初のメソッドの戻り値に基づいて、Android はconvertViewアダプターのgetView(...)メソッドで目的の値を提供します。一般的なアプローチは、単純にレイアウト ID をタイプ (例: R.layout.row_layout) として返すことですが、値がタイプを一意に識別する場合は、好きなものを実際に使用できます。

その後、ViewHolder/RowWrapper を構築するときに、正しいレイアウトをインフレートするために少し余分な作業を行う必要があります。ビューの種類ごとに、適切なレイアウトを選択する必要がありますconvertView == null。少なくとも 1 つのビュー タイプ (デフォルトのケース) があり、多くてもgetViewTypeCount(). アイデアを説明する例は、ここにあります

ビュー タイプ メソッドの詳細:

余談ですが、「add...」オプションを の一部にするのListViewではなく、便利にアクセスできるように、その上または上に配置することを実際に検討します。つまり、最初にスクロールして一番上に戻る必要はありません。

于 2012-10-31T02:06:47.877 に答える