Su contenido debe tener un ListView cuyo atributo de identificación sea 'android.R.id.list'

156

He creado un archivo xml como este:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list" >
</ListView>

y una actividad:

public class ExampleActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlist);
    }
}

Como ves, no he hecho nada más. Pero obtengo el error:

Su contenido debe tener un ListView cuyo atributo de identificación sea 'android.R.id.list'

Aunque tengo la android:id="@+id/list"línea en mi xml.

¿Cuál es el problema?

Isa Kuru
fuente

Respuestas:

345

Cambie el nombre de la identificación de su ListView de esta manera,

<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

Dado que está utilizando ListActivitysu archivo xml, debe especificar la palabra clave android mientras menciona una ID.

Si necesita una costumbre ListView, en lugar de extender a ListActivity, simplemente tiene que extender una Activityy debe tener la misma identificación sin la palabra clave android .

Andro Selva
fuente
44
Hacer esto solucionó mi problema, gracias. Pero me pregunto si sería tan amable de escribir algunas palabras de explicación sobre cuándo un ListView debe tener el ID "@android: id / list" y cuándo está bien que tenga un nombre arbitrario. Es porque me gusta no solo solucionar mi problema, sino también entender por qué se necesitaba la solución.
RenniePet
44
Trabajos. Pero, ¿por qué esto 'juegos' con id dependiendo de la vista impl?
ses
1
Cuando agrego @android, Eclipse dicelist cannot be resolved or is not a field
user83039
1
el mismo problema muestra error: Error: no se encontró ningún recurso que coincida con el nombre dado (en 'id' con el valor '@android: id / list_interestsent').
1
Gracias por esta gran respuesta!
Brewology
23

Debería tener una vista de lista en su mainlist.xmlarchivo con ID como@android:id/list

<ListView
    android:id="@android:id/list"
    android:layout_height="wrap_content"
    android:layout_height="fill_parent"/>
Praveenkumar
fuente
15
<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

Esto debería solucionar tu problema

Aamirkhan
fuente
8

La forma exacta en que lo arreglé se basó en los comentarios anteriores, ya que al principio no pude hacerlo funcionar:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/list"
>
</ListView>

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addPreferencesFromResource(R.xml.preferences);

preferencias.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
    android:key="upgradecategory"
    android:title="Upgrade" >
    <Preference
        android:key="download"
        android:title="Get OnCall Pager Pro"
        android:summary="Touch to download the Pro Version!" />
</PreferenceCategory>
</PreferenceScreen>
Kevin
fuente
4

Heredar clase de actividad en lugar de ListActivity puede resolver este problema.

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}
Vicky
fuente
1
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
Makvin
fuente
0

Otra cosa que me afectó: si tiene varios dispositivos de prueba, asegúrese de realizar cambios en el diseño utilizado por el dispositivo. En mi caso, pasé un tiempo haciendo cambios en xmls en el directorio "diseño" hasta que descubrí que mi teléfono más grande (que cambié a la mitad de las pruebas) estaba usando xmls en el directorio "diseño-sw360dp". Grrr!

RudyF
fuente