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

87

Ich erhalte eine Laufzeitausnahme

java.lang.RuntimeException: Ihr Inhalt muss eine ListView haben, deren ID-Attribut 'android.R.id.list' lautet.

Ich weiß nicht, was los ist.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newslist);
    mDbHelper.open();
    fillData();
}

private void fillData() {
    Bundle extras = getIntent().getExtras();
    long catID = extras.getLong("cat_id");
    Cursor c = mDbHelper.fetchNews(catID);
    startManagingCursor(c);

    String[] from = new String[] { DBHelper.KEY_TITLE };
    int[] to = new int[] { R.id.newslist_text };

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.text_newslist, c, from, to);
    setListAdapter(notes);
}

newslist.xml

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

text_newslist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView 
        android:text="@+id/newslist_text"
        android:id="@+id/newslist_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">    
    </TextView>
</LinearLayout>
Raji
quelle
15
Achten Sie darauf, eine Antwort auszuwählen!
Phil
Was ist mDbHelper? Ich bin auf dem gleichen Boot und versuche, es meine ListView zum Laufen zu bringen ...
Nick Kahn

Antworten:

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

Dadurch wird der Fehler behoben, wenn Sie weiterhin eine ListActivity verwenden möchten.

Nic
quelle
47
Ich musste ein anderes Format verwenden, versuchen android:id="@+id/android:list" Sie es , wenn es nicht funktioniert. Ihre Klasse muss ListActivity noch erweitern, und anstatt dies zu ListView yourListView = (ListView)findViewById(R.id.yourListView);tun, um zu initialisierenListView yourListView = getListView();
CQM
@CQM hier ist irgendein Muster für dieses Verhalten?
Rui Carneiro
5
Dies ist die Lösung, falls es dem OP jemals darum ging, eine Antwort auszuwählen!
Staaten
1
Warum funktioniert das? Warum kann ich android: id keinen anderen Wert zuweisen?
Vivek Pandey
1
@VivekPandey, weil Sie die ListActivity erweitern, die eine ListView mit einem Android erfordert: ID der Liste, developer.android.com/reference/android/app/ListActivity.html , zgcharley unten erklärte es klar
mirageservo
52

Entfernen Sie den Aufruf von setContentView- Sie benötigen ihn nicht in einer ListActivity, es sei denn, Sie tun etwas Radikales. Der Code sollte ohne ihn funktionieren.

Ben L.
quelle
4
Aber woher weiß Activity, welche Vorlage anzuwenden ist, wenn wir setContentView () nicht verwenden?
ses
@ses, ich glaube, es wird eine vordefinierte ListView-Vorlage verwenden.
Craned
26

Ein anderer Weg ist, nicht zu verlängern ListActivity. Nur erweitert Activity, dann können Sie Ihre Listenansicht von erstellen setContentView()und die Listenansicht von abrufen findViewById(R.id.yourlistview).

Wenn Sie von erweitern ListActivity, dann verwenden Sie nicht setContentView(). Sie müssen die Standardlistenansicht erhalten, die in der Listenaktivität von gehostet wird getListView().

zgcharley
quelle
10

Ich hatte ein ähnliches Problem mit der Fehlermeldung, die Sie erhalten haben, und ich fand es, weil ich ListActivity anstatt nur Activity erweitert habe (das bekomme ich, um Code aus einem anderen Projekt neu zu verwenden;))

Tom
quelle
6
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
Kind
quelle
3

Ich sehe das auch so. In meinem Fall (Vielleicht nicht relevant für Ihren Fall, nur an andere weitergeben) mainActivity.java yourClassName extends ListActivity(){...}wechseln Sie in der Klasse zuyourClassName extends Activity(){...}

Sen.
quelle
1
Ich fand das wirklich nützlich. danke Baras für das Teilen.
Ayoub
nächstes Bier ist auf mir.
Venkata Tata
1

Ich war auch mit diesem Problem konfrontiert. Ich habe meine Aktivitätsklasse von Listenaktivität erweitert, aber die ID meiner Listenansicht war nicht fehlerhaft. Ich habe sie wieder in Liste geändert und jetzt funktioniert sie einwandfrei. Asim Soroya

Asim Soroya
quelle