FindViewById () devuelve null – intentado TODO

Me doy por vencido … ni siquiera mi profesor sabe por qué está pasando esto.

El problema es: No importa dónde o cómo llamo a los componentes de este diseño, siempre devuelven null.

LAYOUT: search_layout. 2 EdiText y 2 niños de 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) 

EXCEPTION: Excepción de análisis del XML, como recurso no encontrado, por lo tanto, nulo.

TRIED: Limpié mi proyecto alrededor de 1024 veces, intenté implementar otra clase para mi cuadro de diálogo, mismo resultado, llamado findViewById como miembro de mi actividad principal, dentro del método initSearch () y dentro de una implementación anónima de OnClickListener para mi diálogo, SAME RESULTADO. Rompieron a los niños en puntos de vista independientes y los llamaron programáticamente:

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

Creo que lo intenté todo.

Este es mi código:

 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(); } 

Ahora, cuando lo hago:

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

Aquí está el XML de mi diseño personalizado:

 <?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> 

Este es mi archivo 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 } 

Gracias por su ayuda, feliz caza.

Llamar findViewById() buscará vistas dentro del diseño de su actividad y no de su diálogo. Es necesario llamar a findViewById() en la View específica que establezca como el diseño de su diálogo.

Prueba esto

 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(); } 

Observe cómo estoy inflando la vista y la dialogView en una View llamada dialogView . Entonces, para encontrar su EditText llamado tagField , estoy usando dialogView.findViewById(R.id.tagField);

El TextView con id text123 tiene que ser declarado dentro del Layout que estableció con setContentView

Su problema es que usted está intentando hacer. .show() en un AlertDialog Builder, no el propio AlertDialog.

Pruebe el siguiente código:

 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(); } 

Tuve el mismo problema al programar una aplicación multilingüe. Eventualmente me enteré de que me olvidé de actualizar las etiquetas en algunos archivos de la actividad [xml] de la distribución.

Yo tenía 3 de ellos por actividad:

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

He actualizado sólo el primero y se olvidó de actualizar el otro de la siguiente manera:

Los tres tenían el único TextView con el id de:

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

Entonces he cambiado el nombre del id de esa vista de texto – sólo en el primer archivo – a:

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

Y, por supuesto, en el código Java de la actividad (que utiliza los tres …):

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

Esto funcionó para la versión regular (inglés <activity_name>.xml ).

Pero cuando fui el lenguaje IW (hebreo <activity_name>xml(iw) ) tv tiene valor nulo e incluso tengo algunos aplasta.

Cuando cambié el id de la vista de texto de los otros archivos a "@+id/status_textbox" todo funcionó como un encanto …

Por lo tanto, simplemente asegúrese de que todas sus ID se actualizan y se contabilizan en todos sus diseños e idiomas.

Esto resolvió mi problema de todos modos ..

  • Análisis del archivo gpx local en Android
  • Análisis de un archivo XML en Java para obtener una lista de nombres
  • ¿Cómo puede convertir el archivo XML local a org.ksoap2.serialization.SoapObject?
  • ¿Cómo puedo analizar xml de url en android?
  • Android cómo identificar audio / video de xml?
  • Obtener elementos por nombre de etiqueta de un nodo en documento de Android (XML)?
  • AdMob en android "AdView falta el atributo XML necesario 'adSize'"
  • Análisis local de xml android con drawable
  • Cómo obtengo el atributo usando por XMLPull parser
  • Análisis de CDATA en android
  • Los valores de los hiladores no están ajustados correctamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.