4

リソース テンプレートから作成したいカスタム ビューがあります。私のカスタム ビュー コンストラクターは、カスタム ビューの追加情報として設定される追加パラメーターを受け入れます。

問題は、ビューをインフレートすると、カスタム ビューからサブクラス化されていないビュー オブジェクトを取得することです。これは、インフレート メソッドが静的であり、カスタム ビューのインスタンスではなく汎用の新しいビューを返すためです。

私が探しているのは、カスタム ビュー オブジェクト参照を渡してビューを膨らませる方法です。

public class MLBalloonOverlayView extends View {
    MiscInfo mMiscInfo;
    public MLBalloonOverlayView(Context context, MiscInfo miscInfo) {
        スーパー(コンテキスト);
        mMiscInfo = その他;
    }
    public View create(最終的な int リソース、最終的な OverlayItem アイテム、
                        MapView mapView、最終的な int マーカー ID) {
        ViewGroup viewGroup = null;
        View balloon = View.inflate(getContext(), resource, viewGroup);

      // このオブジェクトを返したいので、後でその mMiscInfo を使用できます
      //これを返す;
        バルーンを返します。
    }
}
4

2 に答える 2

2

https://github.com/galex/android-mapviewballoonsでコードを見た後 、それに応じてコードを更新できました。リソースからレイアウトを作成し、膨張したビューをレイアウトを拡張するクラスのインスタンスに追加するという考え方です (上記で Marcos が提案したように)。

public class MLBalloonOverlayView extends FrameLayout {

    public MLBalloonOverlayView(Context context, final OverlayItem overlayItem) {
        super(context);
        mOverlayItem = overlayItem;
    }

    public void create(final int resource, MapView mapView, final int markerID) {
        // inflate resource into this object
        TableLayout layout = new TableLayout(getContext());
        LayoutInflater.from(getContext()).inflate(resource, layout);
        TableLayout.LayoutParams params = new TableLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.NO_GRAVITY;
        this.addView(layout, params);
    }
}
于 2011-04-27T20:09:57.283 に答える
1

あなたのオブジェクトにそれを膨らませます。

public View create(final int resource, final OverlayItem item, 
                    MapView mapView, final int markerID) {
  LayoutInflater.from(getContext()).inflate(resource, this, true);
  return this;
}
于 2011-04-26T21:36:59.020 に答える