2012-06-15 17 views
142

ho creato un file XML in questo modo:Il contenuto deve avere un ListView cui attributo id è 'android.R.id.list'

<?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 I'am ottenere l'errore:

Your content must have a ListView whose id attribute is 'android.R.id.list'

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

Qual è il problema?

risposta

311

Rinominare l'id del vostro ListView come questo,

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

Dal momento che si sta utilizzando ListActivity il file XML deve specificare la parola chiave Android pur facendo riferimento a un ID.

Se avete bisogno di un costume ListView allora invece di Estensione di un ListActivity, si deve estendere semplicemente un Activity e dovrebbe avere lo stesso ID senza la parola chiave Android.

+4

Fare questo ha risolto il mio problema, grazie. Ma mi chiedo se saresti così gentile da scrivere alcune parole 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 per capire perché è stata necessaria la correzione. – RenniePet

+1

Non funziona. Lo stesso errore. – Xeos

+3

Funziona. Ma perché questo 'giochi' con id dipende dalla vista impl? – ses

23

Si dovrebbe avere una ListView nel mainlist.xml file con ID come @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

6

modo esatto Ho fissato questo basa sul feedback in precedenza poiché non potevo mettilo in funzione all'inizio:

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

Eredita Attività classe invece di ListActivity è possibile risolvere questo problema.

public class ExampleActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.mainlist); 
    } 
} 
0

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

0
<ListView android:id="@id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="false" 
     android:scrollbars="vertical"/> 
Problemi correlati