SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習! Androidアプリケーション開発

地図描画と方位センサーの利用
~速習! Androidアプリケーション開発(6)~

第6回 アクティビティの実装その2

  • X ポスト
  • このエントリーをはてなブックマークに追加

目的地の描画~Geocorderの利用~

 続いて、地図上に目的地を表示します。マップで任意の場所を指定するには緯度(latitude)と経度(longitude)を指定する必要があります。しかし、登録画面で入力するのは住所なので、住所から緯度/経度への変換を行う必要があります。そのような機能を提供してくれるのがGeocorderです。

 Geocorderから複数の結果が返ってきた場合には、ダイアログで候補を表示して対象を選択するようにします。

@Override
public void onCreate(Bundle savedInstanceState) {
    :
    :中略
    :

    // 座標取得用のGeocoder取得
    Geocoder geocoder = new Geocoder( this, Locale.getDefault());

    // インテントから住所の文字列を取得
    Intent intent = getIntent();
    String strAddress = intent.getStringExtra( BizCard.COLUMN_ADDRESS);

    try {
        // 住所からAddressへ変換
        List<Address> addressList = geocoder.getFromLocationName(strAddress, 10);
        
        Address address = null;
        
        if( addressList.isEmpty()){
            String message = getResources().getString( R.string.cannot_get_address);
            Toast toast = Toast.makeText(this, message + "[" + strAddress + "]", Toast.LENGTH_SHORT);
            toast.show();
        }
        else if( addressList.size() == 1){
            address = addressList.get( 0);
        }
        else{
            // 複数のアドレスが見つかった場合はダイアログで対象を選択する
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( this);
            alertDialogBuilder.setTitle( R.string.select_target);
            
            // ダイアログ表示用の文字列の生成
            List<String> strAddressList = new ArrayList<String>();
            for( Address element: addressList){
                int maxAddressLineIdx = element.getMaxAddressLineIndex();
                strAddressList.add( element.getAddressLine( maxAddressLineIdx));
            }

            // ダイアログに表示するリストの生成
            AddressSelectionListener listener = new AddressSelectionListener( addressList);
            ListView listView = new ListView( this);
            ArrayAdapter<String> listAdaptor = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strAddressList);
            listView.setAdapter(listAdaptor);
            listView.setOnItemClickListener( listener);
            
            // ダイアログにリストを生成
            alertDialogBuilder.setView( listView);
            
            // ダイアログの表示
            AlertDialog dialog = alertDialogBuilder.create();
            listener.setDialog( dialog);
            dialog.show();
        }
        
        if( address != null){
            setDist(address);
        }
    } catch (IOException e) {
        Toast toast = Toast.makeText(this, R.string.cannot_get_address, Toast.LENGTH_SHORT);
        toast.show();
    }
}

/**
 * 住所の候補が複数あった場合にリストで選択された住所を表示するリスナ
 */
class AddressSelectionListener implements OnItemClickListener{
    
    private List<Address> listAddress = null;
    
    private AlertDialog dialog = null;
    
    private AddressSelectionListener( List<Address> listAddress){
        this.listAddress = listAddress;
    }
    
    public AlertDialog getDialog() {
        return dialog;
    }

    public void setDialog(AlertDialog dialog) {
        this.dialog = dialog;
    }

    public void onItemClick(AdapterView<?> parent, View view, int position,    long id) {
        // 選択された住所を目的地として設定
        Address address = listAddress.get( position);
        setDist( address);
        // ダイアログを閉じる
        dialog.dismiss();
    }
}

/**
 * 目的地の設定
 * 
 * @param address 住所
 */
protected void setDist( Address address){
    // TODO:後ほど実装
}

 ここでも新たに使用する文字列が登場したので、「res/values/strings.xml」に追加します。

<string name="select_target">対象を選択してください</string>
<string name="cannot_get_address">住所の取得に失敗しました</string>

次のページ
マップ上への描画処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
速習! Androidアプリケーション開発連載記事一覧

もっと読む

この記事の著者

横井 朗(ヨコイ アキラ)

株式会社ビーブレイクシステムズにて業務システムのパッケージソフト(MA-EYES)の製品開発から導入までを手掛けるとともに、オープンソースソフトウェア(ExCella)の開発リーダも務める。オープンソース関連について多くの執筆経験を持つ。  

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4878 2010/02/08 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング