Не удалось получить доступ к ViewStub'child - PullRequest
6 голосов
/ 12 мая 2011

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

1.Main 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>

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

1 Ответ

20 голосов
/ 12 мая 2011

Давайте предположим, что ваш ViewStub ID - 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 (), и делаете с ним все, что хотите - например, скрываете его.

...