findViewById () возвращает null – попробовал ВСЕ

Я сдаюсь … даже мой профессор не знает, почему это происходит.

Проблема в том, что независимо от того, где и как я вызываю компоненты этого макета, они всегда возвращают значение null.

LAYOUT: search_layout. 2 EdiText и 2 детей TextView.

RUNTIME: setView(inflater.inflate(R.layout.search_layout, null)) // works fine, it displays the layout inside the dialog, yet, children are always returned as null by findViewById(R.id.some_search_layout_children) 

ИСКЛЮЧЕНИЕ: Разбор исключений XML, поскольку ресурс не найден, следовательно, null.

TRIED: очистил мой проект примерно в 1024 раза, попытался реализовать еще один class для моего диалогового windows, тот же результат, который называется findViewById, как член моей основной деятельности, внутри метода initSearch () и внутри анонимной реализации OnClickListener для моего диалога, SAME РЕЗУЛЬТАТ. Сломал детей в независимых взглядах и программно назвал их:

 TextView text = (TextView) findResourceById(R.id.new_independant_textview); // same result 

Кажется, я все пробовал.

Это мой код:

 public class Xyz extends Activity { public void onCreate(...) { // some listener will trigger initSearch() } private void initSearch() { AlertDialog.Builder searchDialog = new AlertDialog.Builder(this); LayoutInflater inflater = this.getLayoutInflater(); searchDialog.setTitle("Search Photos"); searchDialog.setMessage("Specify tag and value..."); // R.layout.search_dialog is my custom layour, it displays fine, it works. searchDialog.setView(inflater.inflate(R.layout.search_dialog, null)); EditText tagText = (EdiText) findViewById(R.id.tagField); // WILL RETURN NULL searchDialog.setPositiveButton( ... ) ... searchDialog.show(); } 

Теперь, когда я это делаю:

  EditText text = (EditText) findViewById(R.id.tagField); // returns null, ALWAYS // no matter HOW, WHERE, global, local final, etc, it just returns null. 

Вот XML моего пользовательского макета:

        

Это мой файл R.java:

 public static final class id { public static final int action_settings=0x7f0a0011; public static final int add_album=0x7f0a0001; public static final int add_photo=0x7f0a000d; public static final int albums_list=0x7f0a0003; public static final int delete_album=0x7f0a000b; public static final int exit_finder=0x7f0a000f; public static final int new_directory=0x7f0a000e; public static final int open_album=0x7f0a000a; public static final int photos_grid=0x7f0a0000; public static final int rename_album=0x7f0a000c; public static final int search_dialog=0x7f0a0004; public static final int search_icon=0x7f0a0002; public static final int splash_rutgers=0x7f0a0009; public static final int tagField=0x7f0a0006; // problematic public static final int tagText=0x7f0a0005; / problematic public static final int terminate_app=0x7f0a0010; public static final int valueField=0x7f0a0008; // problematic public static final int valueText=0x7f0a0007; // problematic } 

Спасибо за вашу помощь, счастливая охота.

Вызов findViewById() будет искать виды в макете вашей деятельности, а не в вашем диалоговом окне. Вам нужно вызвать findViewById() на конкретном View которое вы задали в качестве макета вашего диалогового windows.

Попробуй это

 private void initSearch() { AlertDialog.Builder searchDialog = new AlertDialog.Builder(this); LayoutInflater inflater = this.getLayoutInflater(); searchDialog.setTitle("Search Photos"); searchDialog.setMessage("Specify tag and value..."); // R.layout.search_dialog is my custom layour, it displays fine, it works. View dialogView = inflater.inflate(R.layout.search_dialog, null); searchDialog.setView(dialogView); EditText tagText = (EdiText) dialogView.findViewById(R.id.tagField); searchDialog.setPositiveButton( ... ) ... AlertDialog myAlert = searchDialog.create(); //returns an AlertDialog from a Builder. myAlert.show(); } 

Обратите внимание, как я раздуваю представление и сохраняю его в View named dialogView . Затем, чтобы найти ваш EditText именем tagField , я использую dialogView.findViewById(R.id.tagField);

TextView с id text123 должен быть объявлен внутри Layout , установленного с помощью setContentView

Ваша проблема в том, что вы пытаетесь сделать .show() в AlertDialog Builder, а не в AlertDialog.

Попробуйте следующий код:

 public class Xyz extends Activity { public void onCreate(...) { // some listener will trigger initSearch() } private void initSearch() { AlertDialog.Builder searchDialog = new AlertDialog.Builder(this); LayoutInflater inflater = this.getLayoutInflater(); searchDialog.setTitle("Search Photos"); searchDialog.setMessage("Specify tag and value..."); // R.layout.search_dialog is my custom layour, it displays fine, it works. searchDialog.setView(inflater.inflate(R.layout.search_dialog, null)); EditText tagText = (EdiText) findViewById(R.id.tagField); // WILL RETURN NULL searchDialog.setPositiveButton( ... ) ... AlertDialog myAlert = searchDialog.create(); //returns an AlertDialog from a Builder. myAlert.show(); } 

У меня была такая же проблема при программировании многоязычного приложения. В конце концов я узнал, что забыл обновлять метки в файлах активности [xml] в макете.

У меня было 3 из них:

 .xml .xml(land) .xml(iw) 

Я обновил только первый и забыл обновить другое следующим образом:

У всех трех был один TextView с идентификатором:

   

Затем я изменил имя идентификатора этого текстового представления – только в первом файле – на:

   

И, конечно же, в Java-коде Activity (который использует все три …):

  TextView tv = findViewByID(R.id.status_textbox); 

Это сработало для обычной (английской .xml ) версии.

Но когда я перешел на IW-язык (иврит xml(iw) ), tv получил нулевое значение, и я даже получил некоторые раздатки.

Когда я изменил идентификатор текстового вида других файлов на "@+id/status_textbox" все работало как шарм …

Поэтому просто убедитесь, что все ваши идентификаторы обновлены и учтены во всех ваших макетах и ​​языках.

Это все равно решило мою проблему.

  • Был найден недопустимый символ XML (Unicode: 0xc)
  • Как анализировать неверный (плохой / неправильно сформированный) XML?
  • Как преобразовать XML в JSON с помощью C # / LINQ?
  • Лучший модуль узла для синтаксического анализа XML
  • Как конвертировать ISO8601 TimeSpan в C # TimeSpan?
  • xml.LoadData. Данные на корневом уровне недопустимы. Строка 1, позиция 1
  • Где я могу найти подробное сравнение фреймворков Java XML?
  • Почему такая плохая идея анализировать XML с помощью регулярного выражения?
  • Interesting Posts

    Угловой порядок выполнения с `$ q` – Цепочные обещания

    C # HttpWebRequest для получения списка каталогов

    Удалить атрибут readonly из каталога

    django возвращает последнюю миграцию

    Безопасность файлов веб-приложений и паролей базы данных в среде совместного использования linux

    Пункты памяти и стиль кодирования по Java VM

    Как запустить другое приложение, нажав клавишу калькулятора на клавиатуре?

    Должен ли я снова включить .CutCopyMode, прежде чем выйти из моей подпрограммы?

    Как обнаружить поддержку C ++ 11 компилятора с помощью CMake

    Qt – обновление основного windows со вторым streamом

    Связь между оперативной памятью и скоростью процессора

    Какой лучший (более чистый) способ игнорировать вывод в PowerShell?

    Как использовать тернарный оператор в бритве (в частности, для атрибутов HTML)?

    Каков наилучший способ проверить, является ли String целое число на Java?

    Обработать перезагрузку браузера socket.io

    Давайте будем гением компьютера.