Не удается получить доступ к дочернему элементу ViewStub

#android #android-layout #viewstub

#Android #android-layout #viewstub

Вопрос:

Я пытаюсь использовать VIEWSTUB внутри тега слияния. и он работает хорошо.Я могу перехватить onclicklistenr родительской кнопки ViewStub.Но я хочу получить доступ к кнопке, которая находится внутри viewstub.

1. Основной xml:

 <merge>
<LinearLayout>
<Button></Button>
<ViewStub></ViewStub>
</LinearLayout>
</merge>
  

2. просмотр макета заглушки

 <Button android:id="@ id/button_cancel" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:minWidth="100dip"
android:text="Next" />
<ImageView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@ id/imageView"
android:background="@drawable/golden_gate"
/>
</LinearLayout>
  

Я раздуваю заглушку view в activity…здесь я хочу запустить событие щелчка по кнопке отмена.Как это будет возможно

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

1. Пожалуйста, посмотрите полный код, нажав на редактировать

Ответ №1:

Давайте предположим, что ваш ИДЕНТИФИКАТОР ViewStub равен view_stub. В этом действии вам нужно выполнить следующее:

 ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub);
View inflatedView = viewStub.inflate();
Button button = (Button) inflatedView.findViewById(R.id.button_cancel);
  

Теперь вы можете делать все, что хотите, с помощью кнопки 🙂 То есть метод inflate возвращает макет заглушки, который содержит фактические элементы из XML-файла.

Конечно, вы всегда можете использовать атрибут onClick XML…

Что касается удаления ViewStub — вопрос двоякий (проверьте http://developer.android.com/resources/articles/layout-tricks-stubs.html ):

  • перед расширением ViewStub — вы не можете фактически удалить его. Однако в этом нет необходимости, поскольку ViewStub «не имеет размера, он ничего не рисует и никоим образом не участвует в макете».

  • после накачки — вы просто берете представление, возвращенное методом ViewStub.inflate(), и делаете с ним все, что хотите — например, скрываете его.

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

1. Спасибо, Камен.. Если я хочу динамически удалять заглушку со своего экрана. Как это удалить?