私が使っている開発環境は jdk 1.7.0 、android 4.2 、 eclipse 4.2.1
今回はAndroid platformが用意したデフォルトの行レイアウトを使い、シンプルなリストメニューを作成しましょう。もちろん自作のレイアウトを使い、作成することも可能なんです。使い方としては以下の図のようにメニューリストの内容をクリックするとトーストが選択した内容を表示する。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
new android application project で新しいプロジェクトを立ち上がり、そして上記のソースコードに書き換えます。
メニューリストの作成スペースを作るために、ListViewレイアウトを加えなければなりません。
これでコンパイルしてみると、画面には何も表示しません。それはListViewレイアウトにデータをまだ書き込んでいません。レイアウトにデータを書き込むため、まずそのレイアウトにidを加えないといけません。例の場合はListViewレイアウトにtext1というidを加えました。
次は、このidを利用し、データを書き込みます。
2. MainActivityクラスを作成
新しいJavaクラスを立ち上げて、それをMainActivityと名づけます。そして、次のコードを入力します。
public class MainActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] values = new String[] { "Android", "iPhone", "WindowsMobile"}; // First parameter - Context // Second parameter - Layout for the row // Third parameter - ID of the TextView to which the data is written // Forth - the Array of data ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); // Assign adapter to ListView setListAdapter(adapter); } }
ここで注意してもらいたいことは二つあります。一つ目は通常、extends Activity クラスとなっていますが、ここはListActivity クラスに書き換えることです。二目はListActivityクラスの場合はsetContextViewのかわりにsetListAdapterを使うことです。
これでコンパイルしてみると、String配列に代入した"Android","iPhone","WindowsMobile"がメニューに表示しました。
android.R.layout.simple_list_item_1がデフォルトの行レイアウトです。android.R.id.text1はデフォルト行レイアウトに入ってるデフォルトidです。もちろん、自作の行レイアウトを使用することも可能です。
次はメニューをクリックとトーストが表示するプログラムを作成します。
3. onListItemClickメソッドを実装
MainActivityクラスにonListItemClickメソッドを実装し、次のソースコードを入力します。@Override public void onListItemClick(ListView l,View v,int position,long id){ String item = (String)getListAdapter().getItem(position); Toast.makeText(getApplicationContext(), item+"", Toast.LENGTH_SHORT) .show(); }
String itemにgetListAdapter.getItem()メソッドより選択したメニューの名前を代入します。そして、代入したitemをトーストより表示します。
次のソースコードは完成したMainActivityクラスです。
4. 完成!!!
これでチュートリアルは終了です。ビルドすると最初に話したようなプログラムが動くはずです。そして、見ていただいてありがとうございました。次のソースコードは完成したMainActivityクラスです。
import android.os.Bundle; import android.app.ListActivity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] values = new String[] { "Android", "iPhone", "WindowsMobile"}; // First parameter - Context // Second parameter - Layout for the row // Third parameter - ID of the TextView to which the data is written // Forth - the Array of data ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); // Assign adapter to ListView setListAdapter(adapter); } @Override public void onListItemClick(ListView l,View v,int position,long id){ String item = (String)getListAdapter().getItem(position); Toast.makeText(getApplicationContext(), item+"", Toast.LENGTH_SHORT) .show(); } }