0

4.0 以降をターゲットとする Android アプリケーションを作成しており、Google マップ v2 を使用しています。の内容を で設定したいInfoWindowのですがFragment。それが可能かどうか誰かが知っていますか?

私のクラスは実装InfoWindowAdapterしており、関連するコードは次のとおりです。

//
// InfoWindowAdapter interface
//

@Override
public View getInfoContents (Marker marker) {
    LinearLayout layout = new LinearLayout(this.getActivity());
    LayoutInflater inflater = (LayoutInflater) this.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.map_details, layout);

    MapDetailsFragment frag = new MapDetailsFragment();
    // TODO: How to add this fragment to v???

    return v;
}

@Override
public View getInfoWindow (Marker marker) {
    return null;
}

インスタンス化後に次のコードを試しましたfrag

this.getFragmentManager().beginTransaction().replace(R.id.fragment_map_details, frag).commit();

しかしR.id.fragment_map_detailsからのものR.layout.map_detailsなので、FragmentManagerはまだそれについて何も知りません。

どんなポインタでも大歓迎です!

4

3 に答える 3

1

アダプタから返されるビューはライブ ビューではなく、ビットマップに変換されるため、このビューに関連付けられたコード (ボタン クリックなど) は実行されません。

同じケースがフラグメントにも当てはまるため、それを試みるのをやめて、代わりに map_details とフラグメント レイアウトを結合するレイアウトを作成することができます。xml に include を使用すると、おそらくうまくいくでしょう。

于 2013-06-10T05:18:41.650 に答える
0

3 つの提案:

  1. トランザクションとコミットは非同期です。http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()を呼び出してみてください。ただし、それを使用しようとすると、ある時点で例外が発生しました。しかし、あなたはそれでもっと幸運になるかもしれません。

  2. R.id.fragment_map_detailsそれ以外の場合は、から返されたビューに置き換えることにより、フラグメントを通常のサブビューとしてコンテナーに追加してみてくださいfrag.getView()。ただし、それは単なる推測です。おそらく、その戻り値をそのように利用することは想定されていません。(AndroidのAPIに関しては、少し慎重になりました...)

  3. https://developers.google.com/maps/documentation/android/infowindows (「カスタム情報ウィンドウ」の下)から:

後で情報ウィンドウを更新するには (たとえば、画像が読み込まれた後)、showInfoWindow() を呼び出します。

したがって、フラグメント トランザクションが完了したときに通知を受け取る方法を見つけることができれば、そのメソッドを呼び出して情報ウィンドウを更新できます。

于 2014-01-14T16:53:40.767 に答える