Android раздувает представление с использованием существующего объекта view

#android #methods #view #static #inflate

#Android #методы #Вид #статический #раздувать

Вопрос:

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

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

Я бы искал способ увеличить представление, передав ему ссылку на мой пользовательский объект view.

общедоступный класс MLBalloonOverlayView расширяет представление {
 MiscInfo mMiscInfo; 
 общедоступный MLBalloonOverlayView (контекст context, MiscInfo miscInfo) { 
 супер (контекст);
 mMiscInfo = miscInfo;
 } 
 создание общедоступного представления (конечный ресурс int, конечный элемент OverlayItem, 
 MapView MapView, конечный int markerID) {
 ViewGroup ViewGroup = null;
 View balloon = View.inflate(getContext(), ресурс, ViewGroup);

 // Я хочу вернуть этот объект, чтобы позже я мог использовать его mMiscInfo
 //верните это;
 возвращает воздушный шар;
 }
}

Ответ №1:

После просмотра кода на 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);
    }
}
  

Ответ №2:

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

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

Комментарии:

1. К сожалению, это привязывает вновь раздутый вид к «this» как ViewGroup, а не как View, и для моей предполагаемой цели мне нужен View, а не ViewGroup (я добавляю view на карту как пользовательский вид в виде шара).

2. Если ваше представление представляет собой составной макет, вы должны работать с чем-то, что расширяет макет, а не просто представление.