Votre contenu doit avoir un ListView dont l'attribut id est «android.R.id.list»

156

J'ai créé un fichier xml comme celui-ci:

<?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>

et une activité:

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

Comme vous le voyez, je n'ai rien fait d'autre. Mais j'obtiens l'erreur:

Votre contenu doit avoir un ListView dont l'attribut id est «android.R.id.list»

Même si j'ai la android:id="@+id/list"ligne dans mon xml.

Quel est le problème?

Isa Kuru
la source

Réponses:

345

Renommez l'identifiant de votre ListView comme ceci,

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

Puisque vous utilisez ListActivityvotre fichier xml, vous devez spécifier le mot-clé android tout en mentionnant un identifiant.

Si vous avez besoin d'une personnalisation, ListViewau lieu d'étendre a ListActivity, vous devez simplement étendre an Activityet avoir le même identifiant sans le mot clé android .

Andro Selva
la source
4
Faire cela a résolu mon problème, merci. Mais je me demande si vous auriez la gentillesse d'écrire quelques mots d'explication pour savoir quand un ListView doit avoir l'ID "@android: id / list" et quand il est OK pour qu'il ait un nom arbitraire. C'est parce que j'aime non seulement résoudre mon problème, mais aussi comprendre pourquoi le correctif était nécessaire.
RenniePet
4
Travaux. Mais pourquoi ces «jeux» avec id en fonction de la vue impl?
ses
1
Quand j'ajoute @android, Eclipse ditlist cannot be resolved or is not a field
user83039
1
même problème, il affiche une erreur: Erreur: Aucune ressource trouvée qui correspond au nom donné (à 'id' avec la valeur '@android: id / list_interestsent').
1
Merci pour cette excellente réponse!
Brewology
23

Vous devriez avoir une vue de liste dans votre mainlist.xmlfichier avec l'identifiant comme@android:id/list

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

Cela devrait résoudre votre problème

Aamir Khan
la source
8

Comment j'ai résolu ce problème en me basant sur les commentaires ci-dessus, car je ne pouvais pas le faire fonctionner au début:

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

preferences.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
la source
4

Hériter de la classe d' activité au lieu de ListActivity, vous pouvez résoudre ce problème.

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

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

Une autre chose qui m'a affecté: si vous avez plusieurs appareils de test, assurez-vous que vous apportez des modifications à la disposition utilisée par l'appareil. Dans mon cas, j'ai passé un certain temps à apporter des modifications aux fichiers XML dans le répertoire "layout" jusqu'à ce que je découvre que mon plus gros téléphone (que je suis passé à la moitié des tests) utilisait des fichiers XML dans le répertoire "layout-sw360dp". Grrr!

RudyF
la source