#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. Если ваше представление представляет собой составной макет, вы должны работать с чем-то, что расширяет макет, а не просто представление.