Konten Anda harus memiliki ListView yang id atributnya adalah 'android.R.id.list'

156

Saya telah membuat file xml seperti ini:

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

dan suatu kegiatan:

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

Seperti yang Anda lihat, saya belum melakukan hal lain. Tapi saya mendapatkan kesalahan:

Konten Anda harus memiliki ListView yang id atributnya adalah 'android.R.id.list'

Meskipun saya memiliki android:id="@+id/list"baris di xml saya.

Apa masalahnya?

Isa Kuru
sumber

Jawaban:

345

Ganti nama id dari ListView Anda seperti ini,

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

Karena Anda menggunakan ListActivityfile xml Anda harus menentukan kata kunci android sambil menyebutkan ID.

Jika Anda memerlukan kustom ListViewmaka alih-alih Memperpanjang ListActivity, Anda harus cukup memperpanjang Activitydan harus memiliki id yang sama tanpa kata kunci android .

Andro Selva
sumber
4
Melakukan ini memang memperbaiki masalah saya, terima kasih. Tetapi saya bertanya-tanya apakah Anda akan berbaik hati menulis beberapa kata penjelasan kapan suatu ListView harus memiliki ID "@android: id / list" dan kapan OK untuk memiliki nama yang sewenang-wenang. Itu karena saya suka tidak hanya memperbaiki masalah saya tetapi juga untuk memahami mengapa perbaikan itu diperlukan.
RenniePet
4
Bekerja Tapi mengapa ini 'game' dengan id tergantung pada tampilan impl?
ses
1
Ketika saya menambahkan @android, Eclipse berkatalist cannot be resolved or is not a field
user83039
1
masalah yang sama itu menunjukkan kesalahan: Kesalahan: Tidak ada sumber daya yang ditemukan yang cocok dengan nama yang diberikan (di 'id' dengan nilai '@android: id / list_interestsent').
1
Terima kasih atas jawaban yang luar biasa ini!
Brewologi
23

Anda harus memiliki satu tampilan daftar dalam mainlist.xmlfile Anda dengan id sebagai@android:id/list

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

ini harus menyelesaikan masalah Anda

Aamirkhan
sumber
8

Cara tepat saya memperbaiki ini berdasarkan umpan balik di atas karena saya tidak bisa membuatnya bekerja pada awalnya:

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

preferensi.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
sumber
4

Inherit Activity Class bukannya ListActivity Anda dapat menyelesaikan masalah ini.

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

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

Satu hal lain yang memengaruhi saya: Jika Anda memiliki beberapa perangkat uji, pastikan Anda membuat perubahan pada tata letak yang digunakan oleh perangkat. Dalam kasus saya, saya menghabiskan beberapa saat untuk membuat perubahan pada xmls di direktori "layout" sampai saya menemukan bahwa ponsel saya yang lebih besar (yang saya alihkan ke pengujian setengah jalan) menggunakan xmls di direktori "layout-sw360dp". Grrr!

RudyF
sumber