findViewByTag в диалоге - PullRequest
       29

findViewByTag в диалоге

0 голосов
/ 02 апреля 2012

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

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

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

Ответы [ 3 ]

0 голосов
/ 02 апреля 2012

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

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

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

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

parent.findViewWithTag(myTag)

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

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

Идентификатор - это номер ресурса, назначенный элементу (например,a) на 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 голосов
/ 07 апреля 2012

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

0 голосов
/ 02 апреля 2012

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

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);
...