アンドロイドリストビュー
I. xmlレイアウトファイルを使用しないListViewの作成
- HelloListViewという名前でAndroidプロジェクトを作成するには、以下のようにします。 Androidチュートリアル第3回:初めてのAndroidアプリ、HelloWorld .
- ListViewを使うには、ActivityをListActivityに継承させる必要があります。これは、これまでのActivityを継承したものと異なり、このListActivityはActivityを継承して、ListViewを操作するための多くの共通メソッドを継承しており、使い勝手が良いのです。
-
ここで、HelloListView クラスを以下のように修正します。
- public class HelloListView extends ListActivity {.
- /* アクティビティが最初に作成されたときに呼び出されます。*/
- オーバーライド
- public void onCreate(Bundle savedInstanceState) {...
- super.onCreate(savedInstanceState)を実行します。
- //setContentView(R.layout.main)を設定します。
- //アダプタを設定する
- setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,COUNTRIES)) を実行します。
- }
- //データデータ
- private static final String[] COUNTRIES=new String[]{"China","Russia","United Kingdom","France"} のようになります。
- }
-
実行した効果は次のとおりです。
ほら、データがリスト形式で表示されるようになったでしょ!!!!ここでのポイントは、Adapter-adapterを使用していることです。これはListViewのデータソースと考えることができ、ListViewが表示するデータはAdapterという形でListViewに渡されます。このAdapterが非常に重要で、Androidのコントロールのコレクション(ListView、Spinner、GridViewなど)に渡すためのデータはAdapterの状況にあり、Adapterさえマスターすれば、これらのコントロールのコレクションはAdapterを利用しているので、非常に自由にデータを渡すことができるという利点があります。Android では、先ほど使用した配列アダプタや、シンプルなアダプタなど、一般的なアダプタをいくつか用意しています。もしこれらに対応できない場合は、アダプタをカスタマイズして独自のアダプタを実現することもできます。実際、アダプタはコレクションコントロールの要素のレイアウトに相当します。
II: xmlを使用してListViewをカスタマイズする
- 前の例では、main.xml で ListView を定義して ListView をレイアウトするという状況を使わず、ListActivity のデフォルトの ListView を使ってデモをしています。
- ここでは、main.xmlでカスタムListViewを使用し、ListView表示のレイアウト、サイズ、背景色、その他のプロパティを簡単に制御できるようにします。もちろん、前の例でもListViewを取得することで、そのメソッドを使ってレイアウト、サイズ、背景色などを変更することができます。
-
main.xmlを次のように修正します。
- <?xml version="1.0" encoding="utf-8"? >
- <ListView xmlns:android="http://schemas.android.com/apk/res/android"。
- android:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="#FF0000FF"
- >
- </ListView>
-
HelloListView クラスを以下のように修正します。
- public class HelloListView extends ListActivity {.
- /* アクティビティが最初に作成されたときに呼び出されます。*/
- オーバーライド
- public void onCreate(Bundle savedInstanceState) {...
- super.onCreate(savedInstanceState)を実行します。
- setContentView(R.layout.main)を設定します。
- // アダプタを設定する
- setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,COUNTRIES)) を実行します。
- }
- //データデータ
- private static final String[] COUNTRIES=new String[]{"China","Russia","United Kingdom","France"} のようになります。
- }
-
ランニングエフェクトの画像です。
背景が青くなったので、xmlで定義したListViewが動作していることがわかります。
III: 表示する要素のカスタマイズ
- 最初の2つの例は、テキストの行を表示するものです。もし、テキストとグラフィックを混在させたい場合、例えば、前面にテキスト、その後に画像を表示させることができます。この機能を実現するには、アダプタをカスタマイズする必要があります。
-
レイアウトファイルitem.xmlを新規に作成し、以下の内容を記述します。
- <?xml version="1.0" encoding="utf-8"? >
- <リレイアウト
- xmlns:android="http://schemas.android.com/apk/res/android"。
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <テキストビュー
- android:id="@+id/text"
- android:layout_alignParentLeft="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <画像表示
- android:id="@+id/image"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </RelativeLayout>
ここでは主に、リストの各行ごとにテキストと画像を表示するTextViewとImageViewを定義しています。
-
HelloListView クラスを以下のように修正します。
- public class HelloListView extends ListActivity {.
- /* アクティビティが最初に作成されたときに呼び出されます。*/
- オーバーライド
- public void onCreate(Bundle savedInstanceState) {...
- super.onCreate(savedInstanceState)を実行します。
- setContentView(R.layout.main)を設定します。
- //カスタムアダプタを使用して、アダプタを設定します。
- setListAdapter(new TextImageAdapter(this))。
- }
- /**
- * カスタムビュー
- * 著者名 飞雪無情
- */
- private class TextImageAdapter extends BaseAdapter{.
- private Context mContext;
- public TextImageAdapter(Context context) {...
- this.mContext=context;
- }
- /**
- * 要素数
- */
- public int getCount() {
- text.lengthを返します。
- }
- public Object getItem(int position) {.
- nullを返します。
- }
- public long getItemId(int position) {。
- 0を返します。
- }
- // ListViewに表示される個々の要素ビューを生成するために使用します。
- public View getView(int position, View convertView, ViewGroup parent) {...
- // ListViewを最適化する
- if(convertView==null){。
- convertView=LayoutInflater.from(mContext).inflate(R.layout.item, null)となります。
- ItemViewCache viewCache=new ItemViewCache()。
- viewCache.mTextView=(TextView)convertView.findViewById(R.id.text)です。
- viewCache.mImageView=(ImageView)convertView.findViewById(R.id.image);
- convertView.setTag(viewCache)を実行します。
- }
- ItemViewCache cache=(ItemViewCache)convertView.getTag().ItemViewCache cache=(ItemViewCache)convertView.getTag();
- // テキストと画像を設定し、ListView の Item を表示するためにこの View を返します。
- cache.mTextView.setText(texts[position])を実行します。
- cache.mImageView.setImageResource(images[position])を追加しました。
- convertViewを返します。
- }
- }
- // 要素のキャッシュクラス。ListView を最適化するために使用されます。
- private static class ItemViewCache{
- public TextView mTextView;
- public ImageView mImageView;
- }
- // 表示されるテキスト
- private String[] texts=new String[]{"weather","my group","background"};
- // 表示される画像
- private int[] images=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3};
- }
-
実行してみると、以下のような効果が見られます。
IV. ListViewリスト内の要素に対するクリックイベント応答
-
ListViewの要素をクリックして、それに応じた反応をさせたい場合、どのようにすればよいのでしょうか。ListViewの要素をクリックして、何かをポップアップしたり、何かを開いたり、何かを表示したりと、何かに反応させたい場合はどうすればよいでしょうか。その場合は、クリックイベント関数を実装すればよいのです。
-
ListViewのクリックイベントを実装する方法は2つあり、1つはgetListView().setOnClickListener(l);を使う方法、これは普段使っているコントロール設定と同じなので紹介しませんが、以下は2つ目で、ListActivityのonListItemClickメソッドをオーバーライドして、実はこれの最終処理もListViewのsetOnClickListenerで呼び出しに耐えられるようにすることです。
-
HelloListView クラスに以下のコードを追加します。
-
行の1つをクリックして実行すると、次のような効果があります。
V. 概要
ListViewは、少なくとも共通する機能については、もう使いこなしたはずですが、もちろん、ListViewの分割部分、headViewとfootView、ListViewのページングなど、話していないことがたくさんあるので、自分たちで考えていくことが必要です。
関連
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
android E/RecyclerView﹕ アダプタが接続されていないため、レイアウトをスキップする。
-
android:EMSのプロパティ
-
最新のandroidプロジェクトディレクトリにあるarmeabi-v7aとarmeabiの具体的な意味とその違いを教えてください。
-
アンドロイドスタジオのエラーを解決する --> Error:(1, 0) id 'com.android.application' を持つプラグインが見つかりません。
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
Androidカスタムドロップダウンリストボックスコントロール
-
AndroidStudioのショートカット 検索/置換
-
Android自動テストフレームワーク Robotium
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
armeabi-v7a armeabi arm64-v8a パラメータの意味説明
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
AndroidStudio3.0 Error:Execution failed for task ':app:processDebugResources'.
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
アプリはGoogle検索でインデックスされません Androidmanifestのクソみたいな黄色い警告
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
android.content.ActivityNotFoundException を解決します。Intent問題を処理するActivityが見つからない