さて、私のアプリケーションのすべてのマーカーはユーザーを表すので、情報ウィンドウをクリックしてインターネットからデータを取得するときにそのユーザーを識別する必要がありますが、明らかな理由で名前で識別させることはできません。マーカー オブジェクトに属性を追加することはできますか? ありがとう!
5 に答える
あなたは作ることができますHashMap<Marker, User>
このチュートリアルを確認してください: http://bon-app-etit.blogspot.be/2012/12/add-informationobject-to-marker-in.html
マーカー オブジェクトに属性を追加することはできますか?
号Marker
はfinal
です。また、Marker
作成したオブジェクトは、Google Play サービス アプリへの一部の IPC にのみ使用されるため、すぐに消えてしまいます。Marker
あなたが手に入れたオブジェクトは、OnInfoWindowClickListener
再構成されたコピーのようです。
スニペット フィールドにサブタイトルがあるので、それはオプションではありません。
もちろんそうだ。サブタイトルを別の場所に保存し、ユーザーへのキーをサブタイトルに入れます。InfoWindow
からをレンダリングするときInfoWindowAdapter
に、サブタイトルを取り込みます。
マップを介してマーカーへの強力な参照を保持することは良い考えだとは思いません。とにかくカスタム ウィンドウ アダプターを使用してコンテンツをレンダリングするため、MarkerOptions の snippet() または title() を「悪用」して情報を保存することができます。どちらも文字列であるため、保存する情報によっては、メモリの使用量がわずかに増加しますが、マーカーへの強力な参照を保持することで、メモリ リークを防ぐことができます。
また、マップが停止および再開中の永続性を管理する方法と互換性があります。
これは、私が実装した少し単純なソリューションです。コンストラクターでウィンドウに渡したいものを取得する InfoWindowAdapter を作成するだけです。
class CustomWindowAdapter implements InfoWindowAdapter{
LayoutInflater mInflater;
private HashMap<Marker, Double> mRatingHash;
public CustomWindowAdapter(LayoutInflater i, HashMap<Marker, Double> h){
mInflater = i;
mRatingHash = h;
}
@Override
public View getInfoContents(Marker marker) {
// Getting view from the layout file
View v = mInflater.inflate(R.layout.custom_info_window, null);
TextView title = (TextView) v.findViewById(R.id.tv_info_window_title);
title.setText(marker.getTitle());
TextView description = (TextView) v.findViewById(R.id.tv_info_window_description);
description.setText(marker.getSnippet());
RatingBar rating = (RatingBar) v.findViewById(R.id.rv_info_window);
Double ratingValue = mRatingHash.get(marker);
rating.setRating(ratingValue.floatValue());
return v;
}
@Override
public View getInfoWindow(Marker marker) {
// TODO Auto-generated method stub
return null;
}
}
情報ウィンドウに渡すデータはすべてあなたの責任ですが、ここでは評価のハッシュを渡していることがわかります。単なるプロトタイプであり、決して最良の解決策ではありませんが、これは誰でも始められるはずです.
追加のクラスを使用して、いくつかの情報と機能を各マーカーに関連付けています。これが最善のアプローチだとは思いませんが、オプションです。特に、各マップ マーカーに関連する情報以上のものを取得したい場合。これが私がこれに使用する基本的な構造です。
// Make an array list of for all of your things
ArrayList<Thing> things;
class Thing {
long thing_key;
String thing_string;
int thingRadius;
Double coord_long;
Double coord_lat;
Marker marker;
}
// Then to use this to start your list.
things = new ArrayList<>();
// Create the thing object and save all the data
thing = new Thing();
thing.marker = thingMarker;
thing.thing_key = thing_key;
thing.thing_string = thing_string;
thing.radius = Integer.getInteger(thingRadius.getText().toString());
// Save the thing to the thing ArrayList
things.add(thing);