Android надувает вид, используя существующий объект просмотра - PullRequest
4 голосов
/ 27 апреля 2011

У меня есть пользовательское представление, которое я хотел бы создать из шаблона ресурса.Мой конструктор пользовательских представлений принимает дополнительные параметры, которые устанавливаются в качестве дополнительной информации для настраиваемого представления.

Проблема заключается в том, что когда я раздуваю представление, я получаю объект представления, который не разделен на подклассы из настраиваемого представления, поскольку метод inflate является статическим.и возвращает новый общий вид вместо экземпляра моего пользовательского вида.

Если бы я искал, это способ увеличить представление, передав ему ссылку на объект моего пользовательского представления.

public class MLBalloonOverlayView extends View {
    MiscInfo mMiscInfo;
    public MLBalloonOverlayView(Context context, MiscInfo miscInfo) {
        super(context);
        mMiscInfo = miscInfo;
    }
    public View create(final int resource, final OverlayItem item, 
                        MapView mapView, final int markerID) {
        ViewGroup viewGroup = null;
        View balloon = View.inflate(getContext(), resource, viewGroup);

      // I want to return this object so later I can use its mMiscInfo
      //return this;
        return balloon;
    }
}

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

После просмотра кода на https://github.com/galex/android-mapviewballoons я смог соответствующим образом обновить свой код.Идея состоит в том, что вы создаете макет из ресурса, а затем добавляете раздутое представление к экземпляру класса, который расширяет макет (как предложил Маркос выше).

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);
    }
}
1 голос
/ 27 апреля 2011

Надуйте его на свой объект.

public View create(final int resource, final OverlayItem item, 
                    MapView mapView, final int markerID) {
  LayoutInflater.from(getContext()).inflate(resource, this, true);
  return this;
}
...