Intereting Posts
Почему добавление OnClickListener внутри onBindViewHolder из RecyclerView.Adapter считается плохой практикой? Тип StackView для Android с горизонтальным прокруткой При использовании проекта библиотеки Android, как правильно обращаться к ресурсам xml? Почему поле PackageInfo.signatures является массивом, и когда здесь будет что-то другое, кроме одного? Как я могу создать эскиз видеоролика в андроиде? Добавление внешней библиотеки в студию Android Нажатие кнопки для переключения языка Выровнять кнопки AlertDialog до центра Android; Проверьте, существует ли файл без создания нового Как уменьшить размер веб-виджета динамически в соответствии с его содержимым? Силовой Android-виджет для обновления Как отключить представление заголовка в ListView Большое количество ошибок во время сборки Gradle после обновления до Android Studio 2.0 Android-фрагменты навигации и backstack Получение регистрационного удостоверения GCM с использованием Firebase

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 раза, попытался реализовать еще один класс для моего диалогового окна, тот же результат, который называется 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 моего пользовательского макета:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/search_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tagText" android:padding="7dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="14sp" android:text="@string/tag" /> <EditText android:id="@+id/tagField" android:padding="7dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text"/> <TextView android:id="@+id/valueText" android:padding="7dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="14sp" android:text="@string/value" /> <EditText android:id="@+id/valueField" android:padding="7dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text"/> </LinearLayout> 

Это мой файл 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 } 

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

Solutions Collecting From Web of "FindViewById () возвращает null – попробовал ВСЕ"

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

Попробуй это

 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 из них:

 <activity_name>.xml <activity_name>.xml(land) <activity_name>.xml(iw) 

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

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

  <TextView android:id="@+id/loading_textbox" .../> 

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

  <TextView android:id="@+id/status_textbox" .../> 

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

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

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

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

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

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

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