Ihr Inhalt muss eine ListView haben, deren ID-Attribut "android.R.id.list" lautet.


156

Ich habe eine XML-Datei wie folgt erstellt:

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

und eine Aktivität:

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

Wie Sie sehen, habe ich nichts anderes getan. Aber ich bekomme den Fehler:

Ihr Inhalt muss eine ListView haben, deren ID-Attribut "android.R.id.list" lautet.

Obwohl ich die android:id="@+id/list"Zeile in meiner XML habe.

Was ist das Problem?

Antworten:


345

Benennen Sie die ID Ihrer ListView wie folgt um:

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

Da Sie ListActivityIhre XML-Datei verwenden, müssen Sie das Schlüsselwort Android angeben, während Sie eine ID erwähnen.

Wenn Sie eine benutzerdefinierte benötigen , müssen Sie ListViewanstelle von "Erweitern" ListActivityeinfach eine erweitern Activityund sollten dieselbe ID ohne das Schlüsselwort " Android" haben .


4
Dadurch wurde mein Problem behoben, danke. Aber ich frage mich, ob Sie so freundlich wären, ein paar erklärende Worte zu schreiben, wann eine ListView die ID "@android: id / list" haben muss und wann es in Ordnung ist, einen beliebigen Namen zu haben. Das liegt daran, dass ich nicht nur mein Problem beheben möchte, sondern auch verstehen möchte, warum das Problem behoben wurde.
RenniePet

4
Funktioniert. Aber warum diese "Spiele" mit ID je nach Ansicht implizieren?
ses

1
Wenn ich hinzufüge @android, sagt Eclipselist cannot be resolved or is not a field
user83039

1
Das gleiche Problem zeigt den Fehler an: Fehler: Es wurde keine Ressource gefunden, die dem angegebenen Namen entspricht (bei 'id' mit dem Wert '@android: id / list_interestsent').

1
Danke für diese tolle Antwort!
Brewology

23

Sie sollten eine Listenansicht in Ihrer mainlist.xmlDatei mit der ID als haben@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"/>

Dies sollte Ihr Problem lösen


8

Genaue Art und Weise, wie ich dies aufgrund des obigen Feedbacks behoben habe, da ich es zunächst nicht zum Laufen bringen konnte:

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

Einstellungen.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

Vererben Aktivität Klasse statt ListActivity können Sie dieses Problem lösen.

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

Eine andere Sache, die mich betroffen hat: Wenn Sie mehrere Testgeräte haben, stellen Sie sicher, dass Sie Änderungen am vom Gerät verwendeten Layout vornehmen. In meinem Fall habe ich eine Weile Änderungen an xmls im Verzeichnis "layout" vorgenommen, bis ich feststellte, dass mein größeres Telefon (auf das ich nach der Hälfte des Tests umgestellt habe) xmls im Verzeichnis "layout-sw360dp" verwendet. Grrr!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.