2013-04-04 30 views
5

mi rendo conto, per Context.getTheme(), di solito non funziona bene se usiamo Application come ContextPerché getTheme non funziona bene su richiesta

MyApplication.singletonInstance().getTheme().resolveAttribute(R.attr.actionBarDeleteIcon, typedValue, true); 
// typedValue.resourceId will be 0x0, which is invalid 

Tuttavia, se uso Activity come contesto, funziona ben

MyFragment.this.getActivity().getTheme().resolveAttribute(R.attr.actionBarDeleteIcon, typedValue, true); 
// typedValue.resourceId is valid 

mi chiedevo perché non possiamo risolvere attributo attraverso Application?

In manifest, le informazioni sul tema specifico sono disponibili al livello Application. Quindi, ho pensato che ottenere il tema dall'oggetto Application abbia senso.

<application 
    android:theme="..." 

risposta

3

Non funziona perché a quanto pare l'oggetto restituito da getApplicationContext() non è un Context oggetto completo, come notato in this answer by CommonsWare:

Non è una completa Context, sostenendo tutto ciò che Activity fa. Varie cose che cercherete di fare con questo Context non funzioneranno, per lo più legate alla GUI.

Una possibile soluzione è quella di impostare manualmente il tema su che Context, in questo modo:

getApplicationContext().getTheme().applyStyle(R.style.MyTheme, true); 

Ma questo metodo non è stato convalidato dal team di sviluppo di Android; la soluzione corretta è utilizzare Activity per le cose relative all'interfaccia utente, ad esempio getTheme().

Problemi correlati