AlertDialogには様々な表示が可能です。この中からボタンを配置することでバスの時刻表を表示します。
参考サイト
UIコンポーネント/AlertDialogの使い方
http://wikiwiki.jp/android/?UI%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8%2FAlertDialog%A4%CE%BB%C8%A4%A4%CA%FD
このサイトには様々な「AlertDialog」の使い方が書かれていますがその中でボタンを配置するプログラムを追加する。ボタンは3つまで配置でき、「PositiveButton」、「NeutralButton」、「NegativeButton」に分けられる。このボタンそれぞれにタップイベントを追加したものが次のようになる。
HelloItemizedOverlay.java
package jp.co.cqpub.MyMap;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;
public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
super( boundCenterBottom(defaultMarker) );
mContext = context;
populate(); // Android のバグ回避用
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
// TODO 自動生成されたメソッド・スタブ
return mOverlays.get(i);
}
@Override
public int size() {
// TODO 自動生成されたメソッド・スタブ
return mOverlays.size();
}
protected boolean onTap(int index) {
final OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.setPositiveButton("大野方面 時刻表",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(mContext,jp.co.cqpub.MyMap.Zikoku_Hozumi_Oono.class);
final String str = item.getTitle();
intent.putExtra("Position",str);
mContext.startActivity(intent);
}
});
dialog.setNeutralButton("穂積方面 時刻表",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(mContext,jp.co.cqpub.MyMap.Zikoku_Oono_Hozumi.class);
final String str = item.getTitle();
intent.putExtra("Position",str);
mContext.startActivity(intent);
}
});
dialog.setNegativeButton("周辺画像",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(mContext,jp.co.cqpub.MyMap.MainActivity.class);
final String str = item.getTitle();
intent.putExtra("Position",str);
mContext.startActivity(intent);
}
});
// アラートダイアログのキャンセルが可能かどうかを設定します
dialog.setCancelable(true);
AlertDialog alertDialog = dialog.create();
// アラートダイアログを表示します
dialog.show();
return true;
}
}
このプログラムで表示させたAlertDialogがこちらになります。
大野方面、穂積方面の各方面に関する時刻表のボタンを配置し、それぞれのボタンをタッチすることで時刻表のページに飛ぶように作成します。
*「周辺画像」に関しては次のページで解説します。
次に、時刻表の表示についてです。時刻表の表示には「ListView」を使用します。「PinItemizedOverlay.java」よりアイコンをタッチ
Zikoku_Hozumi_Oono.java
package jp.co.cqpub.MyMap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class Zikoku_Hozumi_Oono extends Activity {
private ListView list;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
Intent intent = getIntent();
String position = intent.getStringExtra("Position");
// 確認用
Toast.makeText(this, position, Toast.LENGTH_LONG).show();
TextView textview = (TextView)this.findViewById(R.id.textView1);
textview.setText(position);
// 表示用データ
String[] arr = {
" 平日",
" 6時 ",
" 7時 10",
" 8時 18",
" 9時 33",
"10時 ",
"11時 23",
"12時 ",
"13時 18",
"14時 53",
"15時 ",
"16時 38",
"17時 ",
"18時 20",
"19時 ",
"20時 33",
"",};
//データ省略(arr2〜arr15)
String[] arr16 = {
" 平日 到着時間",
" 6時 ",
" 7時 43 ",
" 8時 51 ",
" 9時 66 ",
"10時 ",
"11時 56 ",
"12時 ",
"13時 51 ",
"14時 ",
"15時 26 ",
"16時 4 ",
"17時 ",
"18時 53 ",
"19時 ",
"20時 ",
"21時 6 ",
"",};
String[] arr17 = {
"",};
if(position.equals("穂積駅前")){
// ArrayAdapterインスタンス作成、ListViewへの表示
list = (ListView)this.findViewById(R.id.listView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listview, arr);
list.setAdapter(adapter);
}
//条件省略(穂積市役所前〜黒野八幡町)
else if(position.equals("大野バスセンター")){
// ArrayAdapterインスタンス作成、ListViewへの表示
list = (ListView)this.findViewById(R.id.listView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listview, arr16);
list.setAdapter(adapter);
}
else {
// ArrayAdapterインスタンス作成、ListViewへの表示
list = (ListView)this.findViewById(R.id.listView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listview, arr17);
list.setAdapter(adapter);
}
}
}
list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"/>
</LinearLayout>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
listview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40sp">
</TextView>
プログラムの内容について説明します。各バス停のアイコンをタッチすると「AlertDialog」が表示されます。この時に例えば、「大野方面 時刻表」をタッチします。そうするとアプリでは「HelloItemizedOverlay.java」の下の部分のプログラムが呼ばれます。その中に「final String str = item.getTitle();」というプログラム行があります。これは、「AlertDialog」の1行目に書かれた文字を呼んでいます。1行目にはそのバス停名を表示するように前のページでプログラムしています。そして、この文字を「intent」を使うことで他のActivityに渡すことが出来ます。この場合「Zikoku_Hozumi_Oono.class」へ送られています。受け取ったクラスでif else文を使い受け取った文字(バス停名)を判断することでそのバス停に合った時刻表を表示することが出来ます。
HelloItemizedOverlay.java
dialog.setPositiveButton("大野方面 時刻表",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(mContext,jp.co.cqpub.MyMap.Zikoku_Hozumi_Oono.class);
final String str = item.getTitle();
intent.putExtra("Position",str);
mContext.startActivity(intent);
}
});
動作させてみた動画
戻る
|