質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

7041閲覧

googlemapマーカーの識別について

effy

総合スコア7

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2016/10/26 18:47

編集2016/10/29 08:10

プログラミング初心者ですが、ご教授願います。

現在AndroidStudioを使って、
・googlemap上にマーカーを複数設置
・マーカーをタップするとマーカーごとに異なった情報を表示する
というアプリを作っています。

現在、複数のマーカーの識別が出来ない状態でして、自力で調べても分からず質問させていただきました。

情報というのが、画像、ボタン、テキストを表示する、マップとは別のActivityを予定しており、
マーカーにtitleとsnippetを追加してinfowindowを表示することは今回考えておりません。
infowindow内に画像やボタンが設置できればよかったのですが出来ませんでした。

マーカーは、map.addMarker(new MarkerOptions().position(new LatLng(,)));
を複数並べて、設置はできました。
ですが、マーカーごとに異なった情報の表示が出来ません・・・

どのマーカーがタップされたのかが分かれば、画面遷移時にputExtraでそのデータを渡してやれば、
遷移先のActivityでデータを受け取り、if文などで表示内容を変えることができると考えているのですが・・・

下記が現在のMainActivity内のマーカー作成と画面遷移の部分のコードです。
コード内のSubActivityが画面遷移先になります。

// マーカーの追加 private void setMarker() { map.addMarker(new MarkerOptions().position(new LatLng(***,***))); map.addMarker(new MarkerOptions().position(new LatLng(***,***))); map.addMarker(new MarkerOptions().position(new LatLng(***,***))); //この文が20個くらい } // マーカータップ時のイベント @Override public boolean onMarkerClick(Marker marker) { Intent intent = new Intent(getApplication(), SubActivity.class); startActivity(intent); return false; }

改めて、複数のマーカーを識別する方法をよろしくお願いします。

追記:
ご回答ありがとうございます。説明に不足があったので加筆修正。

追記:
ご回答ありがとうございました。お陰様でなんとか出来ました。
ネットで調べても参考になるものがなかったので、
稚拙とは思いますが一応完成したコードを載せておきます。

getId()で取得した各マーカーのIDがわからなかったので
クリックリスナーでIDをトーストで表示させた所、
マーカーの追加順に"m0","m1","m2".........
と識別されていることがわかりました。
そこで、上記のマーカー追加部分はそのままに、
マーカークリックリスナーを下記のように変更しました。(~~部分は省略)

// マーカーの追加 private void setMarker() { map.addMarker(new MarkerOptions().position(new LatLng(***,***))); // id = m0 map.addMarker(new MarkerOptions().position(new LatLng(***,***))); // id = m1 map.addMarker(new MarkerOptions().position(new LatLng(***,***))); // id = m2 //この文が20個くらい } // マーカータップ時のイベント @Override public boolean onMarkerClick(Marker marker) { String id = marker.getId(); if (id.equals("m0")) { Intent intent = new Intent(getApplication(), SubActivity.class); intent.putExtra("DATA_ID", id); startActivity(intent); } else if (id.equals("m1")) { Intent intent = new Intent(getApplication(), SubActivity.class); intent.putExtra("DATA_ID", id); startActivity(intent); } ~~~ return false; }

後はputExtraで送られた"DATA_ID"を、SubActivity内で

Intent intent = getIntent(); String Sub_DATA_ID = intent.getStringExtra("DATA_ID");

で受け取り、if文で分岐させてマーカー別に情報を表示させることが出来ました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

addMarkerの戻り値はMarkerだったと思います。
このインスタンスにリスナーをつけるとできたと思いますよ。

投稿2016/10/27 03:58

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

effy

2016/10/27 13:29

説明の不足すみません。追記しました。 リスナーとはMarkerClickListenerのことでしょうか。 現状のコードだと、どのマーカーをタップしても同じ情報しか表示できません。 おそらく、マーカーの追加のときにボタンのIDのような識別するなにかを追加するのと、 MarkerClickListenerの中で、マーカーごとにリスナーが動けば、 できるかと思っているのですが、それが出来ません(泣)
yona

2016/10/27 14:27

あ、そういえばonMarkerClickは共通でしたね。 それならMarker#setTagでマーカーを識別する情報をマーカーに持たせ、onMarkerClickの引数のMarkerインスタンスに対してMarker#getTagを使うことでマーカーを識別してください。
effy

2016/10/27 16:08

ご回答ありがとうございます。 コード内にMarker.setTag(***)を導入しようとしましたが自力では出来ず、(泣) google先生に聞いてみてもview.setTag()などはできるようですが、 Marker.setTag()は検索にかからず・・・ 申し訳ありません、コードの記述をどうしたらいいか教えて頂けないでしょうか。
yona

2016/10/27 16:16

まさか、Marker.setTagとスタティックメソッドとしてアクセスしようとしていませんか? addMarkerの戻り値はMarkerインスタンスです。このインスタンスに対してsetTagをしてください。 グーグルで用例を探す事よりも先に公式サイトのリファレンスを読まないと意味がないです。
effy

2016/10/28 17:10

ご回答ありがとうございます。 setTagを下記のように追加してみたのですが、 "Cannot resolve method" とエラーを吐かれてダメでした・・・ 他のコードは省略しています。 ------ private Marker mAAA; ~~~ mAAA = mMap.addMarker(new MarkerOptions() .position(new LatLng(***, ***))); mAAA.setTag(0); ---- リファレンスの中にgetId()というものがあったので 少し逸れますがこちらを調べてみます。
yona

2016/10/28 17:37

リファレンスを見るとgoogle play service9.4以降ならできるみたいですね。 それ以前ならequalsメソッドで比較する必要があるようです。
effy

2016/10/28 17:51

ご回答ありがとうございます。 googleplayserviceは古い機種でデバッグしているため、 現在8.4を使っていました・・・ リファレンスのその記述は見逃していました。ありがとうございます。 getId()を使うとすると、if文とかでepualsで比較してやればいいんですかね。 少しやってみます。
yona

2016/10/28 18:06

addMarkerした時の戻り値を使い、HashMap<Market,String>に保持すればうまくいくと思いますよ。
effy

2016/10/28 19:58

ご回答ありがとうございます。 HashMapを使う前にお陰様でなんとか出来ました。 長くなってしまったので、本文中にご報告させていただきます。 ありがとうございました。
guest

0

これですかね?
setOnMarkerClickListener(GoogleMap.OnMarkerClickListener listener)
Google APIs for Android - GoogleMap#setOnMarkerClickListener

投稿2016/10/27 02:20

abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

effy

2016/10/27 13:17

説明の不足すみません。追記しました。 MarkerClickListenerは記述しておりまして、 現在このリスナーから画面遷移をさせています。 しかし、このコードですとマーカーの識別がなっておらず、 マーカーごとに別々の情報を表示させることが出来ません・・・
abs123

2016/10/28 01:23

GoogleMap#addMarker(MarkerOptions options)は、 戻り値として生成したMakerオブジェクトを返すので、 それで判別を行えると思います。
effy

2016/10/28 20:00

ご回答ありがとうございます。 お陰様でなんとか解決できましたのでご報告させていただきます。 ありがとうございました。
guest

0

プロパティーの”Title”や”snippet”の設定はどうなっていますか?

投稿2016/10/26 19:25

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

effy

2016/10/27 13:11

プロパティとはMarkerOptionのことでしょうか? でしたら、infowindowは使用しない予定ですので設定しておりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問