2010-09-23 24 views
5

Tengo una clase que se llama cuando se inicia mi aplicación.Android - findViewById (R.id.list) devuelve nulo

public class MainActivity extends Activity implements NetworkEvent. 

En esta situación,

list = (ListView) findViewById(R.id.list); 

funciona perfectamente. Sin embargo, si I a continuación, llamar un nuevo intento a través de:

String[] names = object.names(); 

myIntent Intención = new intención (MainActivity.this, SimpleList.class); myIntent.putExtra ("nombres", nombres); startActivityForResult (myIntent, 0);

donde SimpleList se define como:

public class SimpleList extends ListActivity implements NetworkEvent 

entonces cuando llamo

list=(ListView) findViewById(R.id.list); 

Log.i ("MyApp", "lista:" + lista);

desde dentro de la clase SimpleList, la lista es nula :(

¿Por qué? Ambas clases están dentro del mismo paquete.

Gracias.

Respuesta

16

No estoy exactamente seguro de por qué está sucediendo en su caso, pero el ListView XML en su diseño, debe ser definida como <ListView android:id="@android:id/list", no es el típico <ListView android:id="@+id/list". Si su clase extiende ListActivity, en ese caso, sólo tiene que utilizar getListView() para acceder a la lista.
Comprobar esto:

+0

¡Estupendo! ¡Muchas gracias, esto fue todo! – Dave

+1

No funciona cuando ListView se inicializa en un elemento secundario de FragmentActivity. El mismo objeto nulo devuelto. – Xeos

9

Asegúrate de llamar al setContentView(R.whatever) antes de que puedas encontrar los identificadores en él.

+0

yup - trabajado para mí – sami

+0

gracias hombre ..... !!! – iAmLearning

+0

de hecho, ¡gracias! – ludwigmace

1

En un caso similar, findViewById dejó de funcionar después de agregar una vista LinearLayout.

La solución fue añadir también lo siguiente:

xmlns:android="http://schemas.android.com/apk/res/android"

a LinearLayout.

0

Agregar

"http://schemas.android.com/apk/res/android"

a su vista de lista, por ejemplo:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
    android:text="test" 
    android:layout_width="fill_parent" 
    android:layout_height="40dp"> 
    </TextView> 

    <ListView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">  
    </ListView> 

</LinearLayout> 
0

sólo quiero hablar de lo mi problema fue En mi XML, había asignado android:name="@+id/bob" en lugar de android:id="@+id/bob", pero debido a @ + id, todavía estaba registrándolo como un campo intelisensable.

Cuestiones relacionadas