Il contenuto deve avere un ListView il cui attributo id è 'android.R.id.list'


156

Ho creato un file XML come questo:

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

e un'attività:

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

Come vedi, non ho fatto altro. Ma sto ricevendo l'errore:

Il contenuto deve avere un ListView il cui attributo id è 'android.R.id.list'

Anche se ho la android:id="@+id/list"linea nel mio XML.

Qual è il problema?

Risposte:


345

Rinomina l'id del tuo ListView in questo modo,

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

Dal momento che stai usando il ListActivitytuo file XML devi specificare la parola chiave android mentre menzioni un ID.

Se hai bisogno di un'abitudine, ListViewinvece di estendere a ListActivity, devi semplicemente estendere un Activitye dovresti avere lo stesso ID senza la parola chiave android .


4
In questo modo ho risolto il mio problema, grazie. Ma mi chiedo se saresti così gentile da scrivere qualche parola di spiegazione su quando un ListView deve avere l'ID "@android: id / list" e quando è OK per avere un nome arbitrario. È perché mi piace non solo risolvere il mio problema, ma anche capire perché la correzione era necessaria.
RenniePet,

4
Lavori. Ma perché questo "gioco" con ID dipende dalla vista impl?
sabato

1
Quando aggiungo @android, Eclipse dicelist cannot be resolved or is not a field
user83039

1
stesso problema mostra errore: Errore: Nessuna risorsa trovata che corrisponde al nome specificato (in "id" con valore "@android: id / list_interestsent").

1
Grazie per questa ottima risposta!
Brewology,

23

Dovresti avere una visualizzazione elenco nel tuo mainlist.xmlfile con ID as@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"/>

Questo dovrebbe risolvere il tuo problema


8

Il modo esatto in cui l'ho risolto in base al feedback sopra dato che all'inizio non riuscivo a farlo funzionare:

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

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

Eredita la classe di attività anziché ListActivity per risolvere questo problema.

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

Un'altra cosa che mi ha colpito: se disponi di più dispositivi di test, assicurati di apportare modifiche al layout utilizzato dal dispositivo. Nel mio caso, ho impiegato un po 'di tempo a modificare xmls nella directory "layout" fino a quando non ho scoperto che il mio telefono più grande (a cui sono passato a metà del test) stava usando xmls nella directory "layout-sw360dp". Grrr!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.