RuntimeException: Twoja treść musi mieć ListView, którego atrybut id to „android.R.id.list”

87

Otrzymuję wyjątek czasu wykonywania

java.lang.RuntimeException: Twoja treść musi mieć ListView, którego atrybut id to „android.R.id.list”

Nie wiem, co się stało.

@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
źródło
15
pamiętaj, aby wybrać odpowiedź!
Phil,
co to jest mDbHelper? Jestem na tej samej łodzi i próbuję sprawić, by mój ListView zadziałał ...
Nick Kahn,

Odpowiedzi:

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

To rozwiąże błąd, jeśli nadal chcesz używać ListActivity.

Nic
źródło
48
Musiałem użyć innego formatu, spróbuj, android:id="@+id/android:list" jeśli to nie działa. Twoja klasa musi nadal rozszerzać ListActivity i zamiast robić ListView yourListView = (ListView)findViewById(R.id.yourListView);to, aby zainicjowaćListView yourListView = getListView();
CQM
@CQM tutaj jest jakiś wzór tego zachowania?
Rui Carneiro,
5
To jest rozwiązanie, jeśli OP kiedykolwiek zechciał wybrać odpowiedź!
Stany
1
Dlaczego to działa? Dlaczego nie mogę przypisać żadnej innej wartości do android: id?
Vivek Pandey
1
@VivekPandey, ponieważ rozszerzasz ListActivity, który wymaga ListView z androidem: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley poniżej wyjaśnił to jasno
mirageservo
52

Usuń wywołanie setContentView- nie potrzebujesz go w ListActivity, chyba że robisz coś radykalnego. Kod powinien działać bez niego.

Ben L.
źródło
4
Ale skąd Activity wie, jaki szablon zastosować, jeśli nie używamy setContentView ()?
sesja
@ses, wierzę, że użyje wstępnie zdefiniowanego szablonu ListView.
wyciągnięto
26

Innym sposobem jest, nie przedłużaj ListActivity. Po prostu rozszerza Activity, a następnie możesz utworzyć widok listy według setContentView()i uzyskać widok listy według findViewById(R.id.yourlistview).

Jeśli rozszerzasz się z ListActivity, nie używaj setContentView(). Musisz uzyskać domyślny widok listy obsługiwany w aktywności listy przez getListView().

zgcharley
źródło
10

Miałem podobny problem z komunikatem o błędzie, który otrzymałeś i stwierdziłem, że to dlatego, że rozszerzałem ListActivity zamiast tylko Activity (to jest to, co otrzymuję za ponowne przeznaczenie kodu z innego projektu;))

Tomek
źródło
6
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
dziecko
źródło
3

Ja też tak wyglądam. W moim przypadku (może nie dotyczy Twojego przypadku, po prostu udostępnij innym) w klasie mainActivity.java yourClassName extends ListActivity(){...}zmień nayourClassName extends Activity(){...}

Sen
źródło
1
uznałem to za bardzo przydatne. dzięki Baras za udostępnienie tego.
Ayoub
następne piwo jest na mnie.
Venkata Tata
1

Miałem również do czynienia z tym problemem, rozszerzałem swoją klasę aktywności z listactivity, ale identyfikator mojego widoku listy nie był domyślny. Zmieniłem go z powrotem na listę i teraz działa dobrze. Asim soroya

Asim Soroya
źródło