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?

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 .


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"/>

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

Esto debería solucionar tu problema


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>

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

1
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>

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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.