2010-06-08 20 views
10

ho imparato che quando si usa android:entries con un ListView, utilizza android.R.layout.simple_list_item_1 come il layout per un elemento dell'elenco e android.R.id.text1 come l'ID del TextView all'interno di quel layout. Per favore correggimi se sbaglio.Utilizzare android.R.layout.simple_list_item_1 con un tema leggero

Sapendo questo, ho voluto creare il mio adattatore ma utilizzare le stesse risorse di layout, al fine di fornire coerenza UI con la piattaforma. Così, ho provato la seguente:

mAdapter = new SimpleCursorAdapter(
    getApplicationContext(), 
    android.R.layout.simple_list_item_1, 
    mSites, 
    new String[] { SitesDatabase.KEY_SITE }, 
    new int[] { android.R.id.text1 } 
); 

Purtroppo, perché sto usando un tema leggero (ho android:theme="@android:style/Theme.Light" nel mio <application>), le voci di elenco appaiono con testo bianco, rendendoli illeggibili.

Tuttavia, quando si utilizza android:entries per specificare un elenco statico di elementi, gli elementi vengono visualizzati correttamente, con colore del testo nero.

Cosa sto sbagliando? Come posso rendere il mio adattatore dinamico utilizzare il layout standard ma lavorare con un tema leggero?

risposta

15

Per favore, correggimi se sbaglio.

Hai almeno sbagliato un po '. Utilizza com.android.internal.R.layout.simple_list_item_1. Anche se è quasi identico a android.R.layout.simple_list_item_1, potrebbe avere un tema diverso.

Inoltre, non utilizzare mai getApplicationContext(). Usa il tuo Activity come Context. Vedi se questo aiuta.

+2

Infatti, l'uso di 'this' invece di' getApplicationContext() 'lo corregge. Wow! Grazie! – Felix

+3

@Felix: Sì, 'getApplicationContext()' è un metodo gravemente incasinato. Ti dà un oggetto 'Application', che è un' Context', ma a quanto pare non funziona bene con le cose relative alla GUI relative a 'Context's. A meno che tu non abbia effettivamente bisogno dell'oggetto 'Applicazione' (ad esempio, ne hai uno personalizzato), non userei mai' getApplicationContext() '. Dopotutto, quel metodo è un metodo ... su 'Contesto'. Quindi, per definizione, hai già un 'Contesto' perfettamente delizioso. Sono contento che questo ha funzionato! – CommonsWare

+0

Ho sempre avuto l'impressione che 'getApplicationContext()' fosse in qualche modo più * corretto * (cosa succede se cambiano il modo in cui i contesti funzionano e 'this' non è più un' Context'? 'GetApplicationContext()' probabilmente verrà aggiornato per riflettere i cambiamenti nell'API e non dovrei refactoring il mio codice). Grazie per averlo chiarito :) – Felix

Problemi correlati