2012-04-02 8 views
0

У меня есть настраиваемый диалог, в котором есть два поля EditText, и я изначально установил видимость GONE для обоих (в XML-макете). В диалоговом окне onCreate я хочу сделать findViewByTag, чтобы найти одно из двух полей EditText, чтобы я мог переключать видимость на VISIBLE. Все работает в диалоговом окне, если я переключаю видимость в XML, но я не знаю, как получить ссылку на главный вид диалога из диалогового окна, чтобы я мог вызвать findViewByTag.findViewByTag в диалоговом окне

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

Все еще довольно нова для Android, поэтому все советы о том, как лучше обрабатывать настраиваемые диалоги, оцениваются.

+0

findViewByTag wil работает только как ожидалось, если ваши объекты, помеченные как теги, имеют «хорошо написанные» равные. –

ответ

0

Я собираюсь взять этот пример извне класса вида.

Dialog amazingDialog = new Dialog(context); 

amazingDialog.setContentView(R.layout.amazingdialogcontentview) 
MyAmazingView view = (MyAmazingView)amazingDialog.findViewById(R.id.amazingview); 
TextView tv = (TextView)amazingDialog.findViewById(R.id.textview); 
0

Я не уверен, что именно ваш случай использования, так что может быть лучше, чтобы это сделать, если у вас есть доступ к некоторым переменным-членам можно инициализировать в OnCreate, но если вы этого не сделаете:

Вы можете попробовать

View parent = myDialog.findViewById(R.id.parentId) 

получить известный родительское представление этих EditTexts, а затем вызвать

parent.findViewWithTag(myTag) 

, чтобы найти свой EditText.

Рассматривая, как вы сформулировали свой вопрос, и тот факт, что вы сказали, что вы новичок в Android, знакомы ли вы с различием между идентификаторами и тегами?

Идентификатор - это номер ресурса, присвоенный элементу (например, вид) Android, когда вы говорите ему, чтобы дать что-то имя. Вы бы объявить, в вашем XML:

<TextView android:id="@+id/myTextView"/> <!--with other parameters as necessary--> 

И тогда вы будете использовать

TextView tv = (TextView)findViewById(R.id.myTextView); 

найти что TextView.

Тег - это объект, который можно подключить к представлению (который я уверен, что вы не можете сделать по XML), либо для поиска его позже, либо для сохранения некоторой интересной информации об этом, просмотрите его (например, объект данных, связанный с его содержимым). Таким образом, вы можете сказать:

tv.setTag(myInterestingData); 

так, чтобы вы могли потом посмотреть myInterestingData только при наличии ссылки на телевизор.

+0

Вы можете установить теги в XML с помощью андроида: тега, который я пытаюсь использовать.Моя цель состояла в том, чтобы найти поля редактирования, которые действительно знали идентификатор раньше времени. Tag позволяет это, если они хорошо сформированы. – Dave

0

После долгих чтений и испытаний и ошибок я пришел к выводу, что единственный способ сделать это - использовать несколько EditText в XML, все с видимостью = «ушел». Затем, в коде Java, введите if или switch для поиска и покажите элемент управления либо по тегу, либо по ID. Я просто пытался слишком сильно абстрагироваться в класс Dialog. С помощью нескольких EditText я могу использовать класс для нескольких диалогов вместо одного класса для каждого диалога.

Смежные вопросы