findViewById () devuelve nulo – intenté TODO

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

El problema es: no importa dónde o cómo solicite los componentes de este diseño, siempre devuelven nulo.

DISEÑO: search_layout. 2 niños EdiText y 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) 

EXCEPCIÓN: 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, el 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, MISMO RESULTADO. Rompió a los niños en vistas independientes y programáticamente los llamó:

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

Creo que 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 haga:

  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:

        

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 cacería.

Llamar a findViewById() buscará vistas en el diseño de su actividad y no en la vista de su diálogo. findViewById() llamar a findViewById() en la View específica que establece 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 almacenándola en una View llamada dialogView . Luego, para encontrar tu EditText named tagField , estoy usando dialogView.findViewById(R.id.tagField);

El TextView con id text123 debe ser declarado dentro del Layout que establezca con setContentView

Su problema es que está tratando de hacer .show() en AlertDialog Builder, no en 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 exactamente el mismo problema al progtwigr una aplicación multilingüe. Eventualmente descubrí que olvidé actualizar las tags en los archivos de actividad [xml] de algunos diseños.

Tuve 3 de ellos por actividad:

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

Actualicé solo el primero y olvidé actualizar el otro de la siguiente manera:

Los tres tenían un solo TextView con el id de:

   

Luego cambié el nombre de la identificación de esa vista de texto, solo en el primer archivo, a:

   

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

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

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

Pero cuando fui al lenguaje IW (hebreo xml(iw) ) la tv obtuvo valor nulo e incluso tuve algunos aplastamientos.

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

Por lo tanto, simplemente asegúrese de que todas sus identificaciones se actualicen y se tengan en cuenta en todos sus diseños e idiomas.

Esto resolvió mi problema de todos modos ..