web-dev-qa-db-ja.com

androidのGoogleマップv2 APIのマーカーにIDを追加します

アプリケーションのすべてのマーカーはユーザーを表すので、インターネットからデータを取得するために情報ウィンドウをクリックするときにそのユーザーを識別する必要があり、明白な理由で名前で識別することはできません。マーカーオブジェクトに追加の属性を追加することはできますか?ありがとう!

31
vdrg

HashMap<Marker, User>

このチュートリアルを確認してください: http://bon-app-etit.blogspot.be/2012/12/add-informationobject-to-marker-in.html

38
dumazy

マーカーオブジェクトに追加の属性を追加することはできますか?

いいえ。Markerfinalです。また、作成したMarkerオブジェクトは、Google Play Servicesアプリの一部のIPCに対してのみ使用されます。取得したMarkerオブジェクトOnInfoWindowClickListenerで再構成されたコピーのようです。

スニペットフィールドにサブタイトルがあるので、それはオプションではありません。

もちろんそうだ。サブタイトルを別の場所に保存し、ユーザーのキーをサブタイトルに入れます。 InfoWindowからInfoWindowAdapterをレンダリングしたら、サブタイトルを引き出します。

8
CommonsWare

マップを介してマーカーへの強い参照を維持することは良い考えだとは思いません。とにかくカスタムウィンドウアダプターを使用してコンテンツをレンダリングするので、MarkerOptionsのsnippet()またはtitle()を「乱用」して情報を保存できます。どちらも文字列であるため、格納する情報に応じてわずかに多くのメモリを使用しますが、反対側ではマーカーへの強い参照を保持することでメモリリークから安全になります。

また、停止および再開時にMapsが永続性を管理する方法と互換性があります。

5
comeGetSome

以下は、私が実装した少し単純なソリューションです。行うことは、コンストラクターでウィンドウに渡したいものを受け取る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;
}
}

情報ウィンドウに渡すデータはすべてあなたが責任を負いますが、評価のハッシュを渡していることがわかります。単なるプロトタイプであり、決して最良の解決策ではありませんが、これは誰もが始めるはずです。

2
wapples

追加のクラスを使用して、いくつかの情報と機能を各マーカーに関連付けています。これは最善のアプローチではないと思いますが、オプションです。特に、各マップマーカーに関連付けられている情報以上のものが必要な場合。これに使用する基本的な構造は次のとおりです。

//   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);
0
AlbertMarkovski