Transcript pptx

ビューとイベント2
5/25
前回の内容
(インターフェイス)
 (イベントとリスナ)

テキストの設定
 ボタン
 チェックボックス
 ラジオボタン
 エディットテキスト

本日の内容

リスト

スピナ

メニュー

ダイアログ
リストとは

リストとは、複数の項目の中から1つ
を選ぶ時に使われるビューです。

まずはListTestActivity.javaをコピーして
実行してみましょう
実行結果
実行して項目を選ぶと、
<選んだ項目>ですね。
と表示されます。
では、ソースを見てみましょう
ソースの中身
TextView tv;
// リストビューの定義
①
ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(ll);
tv = new TextView(this);
tv.setText("趣味を選んでください");
// 初期化
lv = new ListView(this);
// リストに表示する文字列の用意
String[] str = { "読書", "スポーツ", "旅行", "ゲーム", "映画", "音楽", "特にないよ" };
②
/**
* リストの設定 ArrayAdapterを使って、リストに表示する方法や文字列を設定する
* R.layout.simple_list_item_1は予め用意されてる表示方法
*/
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, str);
lv.setAdapter(ad);
③
赤文字が新しい内容
ソースの中身
ll.addView(tv);
ll.addView(lv);
// リストの項目を選んだ時のリスナ登録
lv.setOnItemClickListener(new OnItemClickListener() {
// イベント処理の中身
public void onItemClick(AdapterView<?> v, View iv, int pos, long id) {
④
// 選んだ項目の文字列を取り出して表示する
TextView tmp = (TextView) iv;
tv.setText(tmp.getText() + "ですね。");
}
});
}
⑤
①リストビューオブジェクトの
生成
リストビューオブジェクトの生成は、
他のオブジェクトと同様です。
ListView lv;
lv = new ListView(this);
②リストに表示する文字列の作
成
リストビューオブジェクトが作成できたら、
リストに表示する項目を作成します
↓[]は配列を意味し、同じ型のデータをたくさん入れられる
String[] str = { "読書", "スポーツ", "旅行
", "ゲーム", "映画", "音楽", "特にないよ
" };
③項目の設定
リストに表示する項目が作成できたら、ArrayAdapter
を使ってリストビューオブジェクトにデザインや項
目を設定します
表示するActivityクラス
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, str);
AndroidSDKで予め用意された
表示方法
※android.R.layout.simple_list_item_1 で固定
表示する文字列データ
//ArrayAdapterで設定したものをリストビューオブジェクトに設定
lv.setAdapter(ad);
④リスナの登録
ユーザーがイベントを起こした時になんらかの処理をし
たい場合、イベント処理やリスナ登録が必要でした
リストの項目を選んだ時にイベント処理を起こすには
OnItemClickListenerを登録しonItemClickメソッドを実装します
//リスナ登録
lv.setOnItemClickListener(new OnItemClickListener() {
// イベント処理の中身
public void onItemClick(AdapterView<?> v, View iv, int pos, long id) {
(略)
}
});
⑤イベント処理
項目の文字列データはView型のiv、順番はint型のposが持っています。
ここでは、選んだ項目の文字列を取り出して表示しているので、ivを
テキストビュー型にキャストし、getTextメソッドで文字列を取り出し
ています
// イベント処理の中身
public void onItemClick(AdapterView<?> v,View iv, int pos, long id) {
// 選んだ項目の文字列を取り出して表示する
TextView tmp = (TextView) iv;
tv.setText(tmp.getText() + "ですね。");
}
練習
ListTestActivity.javaを書き
換えて、右の図のように
“X番目のYYYですね”
と表示されるようにして
みましょう
スピナとは

スピナとはリストビューと同様に複数
の項目から一つを選ぶためのビューで
すが、右端をタッチすると項目が現れ
ます

まずはSpinnerTestActivity.javaをコピー
して実行してみましょう
実行結果
実行してタッチすると
右のようにして項目一
覧が表示され、項目を
選ぶと、<選んだ項目>
ですね。
と表示されます。
では、ソースを見てみ
ましょう
ソースの中身
TextView tv;
Spinner sp;
①
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(ll);
tv = new TextView(this);
sp = new Spinner(this);
String[] str = { "読書", "スポーツ", "旅行", "ゲーム", "映画", "音楽", "特にないよ" };
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, str);
ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(ad);
sp.setPrompt("↓から選んでください");
赤文字が新しい内容
②
ソースの中身
ll.addView(tv);
ll.addView(sp);
sp.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> v, View iv, int pos,
long id) {
TextView tmp = (TextView) iv;
tv.setText(tmp.getText() + "ですね。");
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
④
③
①スピナオブジェクトの生成
スピナオブジェクトの生成は、他のオ
ブジェクトと同様です。
Spinner sp;
sp = new Spinner(this);
②項目の設定
スピナに表示する項目が作成できたら、ArrayAdapterを
使ってスピナオブジェクトにデザインや項目を設定しま
す
表示するActivityクラス
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout. simple_spinner_item, str);
ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown
_item);
AndroidSDKで予め用意された
表示方法
表示する文字列データ
※ android.R.layout. simple_spinner_item
android.R.layout.simple_spinner_dropdown で固定
//ArrayAdapterで設定したものをリストビューオブジェクトに設定
sp.setAdapter(ad);
sp.setPrompt(“↓から選んでください”);//選択時に表示するメッセー
ジ
③リスナの登録
ユーザーがイベントを起こした時になんらかの処理をし
たい場合、イベント処理やリスナ登録が必要でした
リストの項目を選んだ時にイベント処理を起こすには
OnItemSelectedListenerを登録しonItemSelectedメソッドと
onNothingSelectedメソッドを実装します
//リスナ登録
sp.setOnItemSelectedListener(new OnItemSelectedListener() {
// イベント処理の中身
public void onItemSelected(AdapterView<?> v,View iv, int pos,
long id) {
(略)
public void onNothingSelected(AdapterView<?> arg0) {
}
});
④イベント処理
項目の文字列データはView型のiv、順番はint型のposが持っています。
ここでは、選んだ項目の文字列を取り出して表示しているので、ivを
テキストビュー型にキャストし、getTextメソッドで文字列を取り出し
ています
// イベント処理の中身
public void onItemSelected(AdapterView<?> v, View iv, int pos,
long id) {
// 選んだ項目の文字列を取り出して表示する
TextView tmp = (TextView) iv;
tv.setText(tmp.getText() + "ですね。");
}
onNothingSelectedメソッドは何も選択されなかった時に呼び出されま
す
メニューとは

メニューとは、Menuボタンを押した
時に表示されるものです

MenuTestActivityを実行してみましょう
実行結果
実行して、エミュレータの
右側にあるMenuボタンを押
すと、図のように項目が表
示されます。
項目をタッチすると、~が
選択されました
と表示されます。
では、ソースを見てみま
しょう
ソースの中身
TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TableLayout tl = new TableLayout(this);
setContentView(tl);
tv = new TextView(this);
tv.setText("メニューのテスト");
tl.addView(tv);
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 0, 0, "機能1");
menu.add(Menu.NONE, 1, 1, "機能2");
menu.add(Menu.NONE, 2, 2, "設定");
menu.add(Menu.NONE, 3, 3, "終了");
return super.onCreateOptionsMenu(menu);
}
②
①
ソースの中身
public boolean onOptionsItemSelected(MenuItem mi) {
String str = null;
switch (mi.getItemId()) {
case 0:
④
str = "機能1";
break;
case 1:
str = "機能2";
break;
case 2:
str = "設定";
break;
case 3:
str = "終了";
break;
}
tv.setText(str + "が選択されました。");
return true;
③
①メニューの作成
メニューの項目は、予め用意された
onCreateOptionsMenuメソッド内で設定
します
public boolean
onCreateOptionsMenu(Menu menu) {
(略)
}
②項目の追加

項目の追加は、引数にあるmenuに表示場所
や表示する文字を書いたものaddで追加しま
す
アイテム番号
表示する文字列
menu.add(Menu.NONE, 0, 0, "機能1");
グループ番号
表示する順序
グループ番号・アイテム番号は、後で処理する時にどの項目が押された
かを判別するのに必要で、判別しない時はMenu.NONEとしてもいい
③イベント処理
メニューでは、リスナ登録は不要でonOptionsItemSelectedメ
ソッド内に処理を書くだけでokです
public boolean onOptionsItemSelected(MenuItem mi) {
//ここに処理を書く
return true;
}
④押された項目による分岐
メソッドの引数miには押された項目の情報が入っているので、例えばアイテム番号
によって分岐させる場合には以下のようにgetItemIdメソッドを使います
switch (mi.getItemId()) {
case 0:
str = "機能1";
break;
case 1:
str = "機能2";
break;
case 2:
str = "設定";
break;
case 3:
str = "終了";
break;
}
miは押された項目の情報を持つ
アイテム番号によって分岐
※getGourpIdメソッドでグループ番号による判別も可能です
練習

右の図のようにメ
ニューの項目を増や
してみましょう。
ダイアログ

ダイアログとは、画面よりも前に表示され
ユーザーに入力を求めたり、警告などを出
す小さいウィンドウのことで以下の工程が
必要です
DialogTestActivity.javaを実行してみましょう
実行結果
実行すると、右のようなダイ
アログが表示されます
ではソースを見てみましょう
ソースの中身
TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(ll);
AlertDialog.Builder dlg = new AlertDialog.Builder(this);
dlg.setTitle("ダイアログテスト");
dlg.setMessage("Hello");
dlg.setPositiveButton("OK", null);
dlg.show();
tv = new TextView(this);
tv.setText("こんにちは");
ll.addView(tv);
}
}
①
②
③
①ダイアログの生成

ダイアログを生成するには、AndroidSDKで
予め用意されている AlertDialog.Builderを使
います。
AlertDialog.Builder dlg = new
AlertDialog.Builder(this);
表示するActivityクラス
②ダイアログの設定

ダイアログに表示するタイトル、文章
等は、それぞれset~メソッドで設定
できます
表示するタイトル
dlg.setTitle("ダイアログテスト");
dlg.setMessage("Hello");
表示する文章
dlg.setPositiveButton("OK", null);
表示するボタンに表示する文章と押し
た時の動作。
③ダイアログの表示
ダイアログの設定が完了したらshow
メソッドを使って表示します
 ダイアログを作成してもshowメソッ
ドを呼び出さないと表示されません

dlg.show();
ダイアログにイベントを付ける
例のプログラムでは
dlg.setPositiveButton("OK", null);

としていましたが、nullの部分にリスナを指定することで
ボタンを押した時にイベント処理を発生させることが出
来ます
dlg.setPositiveButton("OK", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
tv.setText("とじました");
}
});
課題

リスト又はスピナの項目を選択すると
テキストの文字の色が変わるようにし
てみましょう
課題

画面内にボタンを配置し、ボタンを押
すとダイアログが表示されるようにし
てみましょう
補足

ダイアログの種類
資料ではダイアログを
作成するために
AlertDialog.Builderを使
いましたが右のような
Daialogクラスも用意さ
れています
補足

ダイアログの種類
しかし、一般には目的に合わせて
Dialogを拡張したクラスを使います
Dialog
AlertDialog
ProgressDialog
DatepickerDialog
TimePickerDialog