RuntimeException: Konten Anda harus memiliki ListView yang atribut id-nya adalah 'android.R.id.list'

87

Saya mendapatkan pengecualian waktu proses

java.lang.RuntimeException: Konten Anda harus memiliki ListView yang atribut id-nya adalah 'android.R.id.list'

Saya tidak tahu apa yang salah.

@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
sumber
15
pastikan untuk memilih jawaban!
Phil
apa itu mDbHelper? Saya berada di perahu yang sama dan mencoba membuatnya bekerja dengan ListView saya ...
Nick Kahn

Jawaban:

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

Ini akan menyelesaikan kesalahan jika Anda masih ingin menggunakan ListActivity.

Nic
sumber
49
Saya harus menggunakan format yang berbeda, coba android:id="@+id/android:list" jika tidak berhasil. Kelas Anda masih harus memperluas ListActivity, dan daripada melakukan ListView yourListView = (ListView)findViewById(R.id.yourListView);ini untuk menginisialisasiListView yourListView = getListView();
CQM
@CQM di sini apakah ada jenis pola pada perilaku ini?
Rui Carneiro
5
Inilah solusinya, jika OP pernah peduli untuk memilih jawaban!
Amerika
1
Mengapa ini berhasil? Mengapa saya tidak dapat menetapkan nilai lain ke android: id?
Vivek Pandey
1
@VivekPandey, karena Anda memperluas ListActivity yang memerlukan ListView dengan android: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley di bawah menjelaskannya dengan jelas
mirageservo
52

Hapus panggilan ke setContentView- Anda tidak membutuhkannya dalam ListActivity kecuali Anda melakukan sesuatu yang radikal. Kode harus berfungsi tanpanya.

Ben L.
sumber
4
Tapi bagaimana Activity tahu template apa yang akan diterapkan jika kita tidak menggunakan setContentView ()?
ses
@ses, saya yakin ini akan menggunakan template ListView yang telah ditentukan sebelumnya.
diambil
26

Cara lain adalah, jangan diperpanjang ListActivity. Perluas saja Activity, lalu Anda dapat membuat tampilan daftar setContentView()dan mendapatkan tampilan daftar findViewById(R.id.yourlistview).

Jika Anda memperluas dari ListActivity, maka jangan gunakan setContentView(). Anda perlu mendapatkan tampilan daftar default yang dihosting di aktivitas daftar oleh getListView().

zgcharley.dll
sumber
10

Saya memiliki masalah serupa dengan pesan kesalahan yang Anda terima, dan saya menemukan itu karena saya memperluas ListActivity dan bukan hanya Activity (itulah yang saya dapatkan untuk mengubah kode dari proyek yang berbeda;))

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

Saya menghadapi seperti ini juga. Dalam kasus saya (Mungkin tidak relevan dengan kasus Anda, bagikan saja kepada orang lain) di mainActivity.java yourClassName extends ListActivity(){...}perubahan kelas keyourClassName extends Activity(){...}

Sen
sumber
1
saya menemukan ini sangat berguna. terima kasih Baras untuk berbagi ini.
Ayyoub
bir berikutnya untukku.
Venkata KC Tata
1

Saya juga menghadapi masalah ini, saya memperluas kelas aktivitas saya dari daftar aktivitas, tetapi id tampilan daftar saya tidak defualt. Saya mengubahnya kembali ke daftar dan sekarang berfungsi dengan baik. Asim soroya

Asim Soroya
sumber