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.
- Diferencia entre setContentView y LayoutInflater
- Cómo quitar caracteres de acento de un InputStream
- No se puede resolver el símbolo HttpEntity, HttpResponse
- C: ¿Cómo analizar XML en android?
- Excepción android.view.WindowLeaked
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.
- Parse Arabic XML en Android
- Adview error de análisis de XML sin consolidar prefijo Android
- Lectura de un archivo .xml desde sdcard
- XmlPullParser no funciona con InputStream
- Quiero analizar Google Map API para el geocódigo inverso en Android
- Consumir servicio REST Web y analizar datos XML en Android
- Android Dynamic Array
- Los datos Xml se convierten en datos Json en android
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 ..
- Obtener el directorio de una ruta de acceso de archivo en java (android)
- Android: Intent.ACTION_SEND con EXTRA_STREAM no adjunta ninguna imagen al elegir la aplicación de Gmail en htc Hero