SHOEISHA iD

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

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

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術

YOLPで挑戦~施設内を検索するAndroidアプリをお手軽に作成!

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術(4)

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

店舗一覧をリストで表示

 店舗一覧情報のリスト表示を実装します。まず、地図面からリストビューに遷移する際に渡していたAPIの検索結果をgetIntent()で取得します。ArrayListをIntentで渡す際は、データを作る時にSerializableにしておくことでintentで渡すことができます。

 続いて、APIの検索結果の中からリストビューに必要な情報を抜き出してArrayList<SearchList>に渡します。今回は表示する要素が複数あったため、Androidのデフォルトリストビューを使わずに独自のレイアウトを作成しました。

 ArrayList<SearchList>に店舗ごとの表示要素を渡し終わったら、それをSearchListAdapterにセットします。このAdapterの内部は受け取ったデータからリストビューのアイテムのViewを作成して返します。

// 地図面から渡した検索結果を取得(Serializeして持ってくる)
Intent intent = getIntent();
m_innerData = (ArrayList<InnerSearchData>) intent.getSerializableExtra("RESULT");
InnerSearchData result = m_innerData.get(0);
// ヘッダに表示する文言の取得
TextView textView = (TextView)findViewById(R.id.header_building);
String building = result.getBuildingName() + "(全" + result.getBuildingFloor() + "フロア)";
// 施設名と総フロア数を表示
textView.setText(building);

// 検索結果から表示する際に使う要素をListデータに渡す
list = new ArrayList<SearchList>();
for(int i = 0; i < m_innerData.size(); i++) {
    InnerSearchData resultItem = m_innerData.get(i);
    SearchList setItem = new SearchList();
    // 店舗名
    setItem.setName(resultItem.getName());
    // ユニークID
    setItem.setUid(resultItem.getUid());
    // ジャンル名
    setItem.setGenreName(resultItem.getGenreName());
    // 電話番号
    setItem.setTel(resultItem.getTel());
    list.add(setItem);
}

// ListAdapter に要素を渡す
 ListAdapter searchListAdapter = new SearchListAdapter(getApplicationContext(), list);
 ListView listView = (ListView)findViewById(R.id.searchlist_listview);
// ListView に別途作ってあるadapter をセットする
listView.setAdapter(searchListAdapter);

店舗ページを表示

 店舗を一覧表示できましたが、これだけだとお店の詳細がわかりませんよね? レスポンスには店舗ごとのユニークIDも含まれているので、最後にこの情報を使って、該当するお店のYahoo!ロコ店舗ページをブラウザで表示してみましょう。リストビューの何番目がタップされたかをonItemClickの第3引数になっているpositionから取得します。後はlist.get(position).getUid()でユニークIDを取得して遷移先のURIを作ってIntentで飛ばすだけです。

InnerListActivity.java
// ListView のアイテムをタップした時の挙動
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // URI の作成
        String url = "http://loco.yahoo.co.jp/place/" + list.get(position).getUid() + "/";
        Uri uri = Uri.parse(url);
        // 遷移先を指定してブラウザで表示する
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        // ブラウザの起動
        startActivity(intent);
    }
});

おわりに

 いかがでしたでしょうか。連載1回目の「YOLPで挑戦~Android向け簡易道のり測定アプリを30分で作る!」では、「Yahoo! AndroidマップSDK」が持つ機能の範囲内でできることを行いましたが、今回は追加で「施設内検索API」を使用し、少しリッチな情報を扱ってみました。YOLPでは「施設内検索API」に限らず、他にも多数のリッチな情報を扱っているAPIが公開されています。今回アプリを作成する時に使ったYOLPのAPIリクエストライブラリと位置情報取得ライブラリを使えば、他のAPIを使ったアプリも手軽に作成できると思いますので挑戦してみてください。

 なお、今回使用したソースコードはこちらからダウンロードできますので、ぜひお試しください。

施設内検索に対応した新「地図 Yahoo!ロコ」アプリ

 5月24日にアップデート公開された「地図 Yahoo!ロコ」では、今回紹介した施設内検索機能を使って、主要施設内の店舗を検索できるようになりました。ぜひGoogle Playからダウンロードしてお試しください。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術連載記事一覧

もっと読む

この記事の著者

中村 友一(ヤフー株式会社)(ナカムラ ユウイチ(ヤフーカブシキガイシャ))

2009年Yahoo!JAPAN入社。「Yahoo!自動車」の開発、「Yahoo!ロコ」の立ち上げを経てAndroid版「地図 Yahoo!ロコ」アプリの開発を担当。フットサル、自動車、楽器、写真など趣味は多数。TwitterIDは@sonatax。

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング