Come si può risolvere il problema del metodo deprecato in android studio?
Avrete probabilmente notato che quando scrivete qualcosa come:
context.getResources().getColor(R.color.some_color_resource_id);
Android Studio vi darà un messaggio lint che vi avverte che il metodo Resources#getColor(int) è stato deprecato in Marshmallow in favore del nuovo metodo Resources#getColor(int, Theme), che tiene conto dei temi. Probabilmente ora sapete anche che la facile alternativa per evitare questo avviso di lint in questi giorni è chiamare:
ContextCompat.getColor(context, R.color.some_color_resource_id);
che sotto sotto è essenzialmente solo un modo sintetico di scrivere:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getResources().getColor(id, context.getTheme());
} else {
return context.getResources().getColor(id);
}
Abbastanza facile. Ma cosa sta realmente succedendo qui? Perché questi metodi sono stati deprecati in primo luogo e cosa hanno da offrire i nuovi metodi Theme-aware che non esistevano prima?
Se state usando Android Studio come IDE per lo sviluppo di applicazioni Android, incontrerete questo problema con android SDK versione 22 e superiore.
per esempio considerate il seguente caso:
ANDROID.SUPPORT.V7.ACTIONBARACTIVITY IS DEPRECATED
Questo perché la classe ActionBarActivity è stata deprecata e Android Studio deve ancora cambiare la classe predefinita Parent Activity da ActionBarActivity a AppCompatActivity.
La nuova versione di ActionBarActivity (quella che estende la classe AppCompatActivity) è una classe di retrocompatibilità sicura da usare. La deprecazione di ActionBarActivity è solo un suggerimento per utilizzare direttamente la nuova AppCompatActivity.
AppCompatActivity è una nuova implementazione più generica che utilizza internamente la classe AppCompatDelegate.
Per quanto riguarda AppCompatDelegate, permette di avere nuovi widget colorati in un'attività, che non è né AppCompatActivity né ActionBarActivity.
Per esempio, si eredita un'attività da una libreria esterna, che, a sua volta, non eredita da AppCompatActivity, ma si vuole che questa attività abbia dei widget di materiali colorati (viste).
Per fare ciò è necessario creare un'istanza di AppCompatDelegate all'interno della tua attività, sovrascrivere i metodi di questa attività come addContentView(), setContentView() ecc.
(vedi il javadoc di AppCompatDelegate per la lista completa dei metodi), e all'interno di questi metodi sovrascritti inoltrare le chiamate all'istanza interna di AppCompatDelegate. AppCompatDelegate farà il resto e la vostra attività "vecchio stile" sarà "materializzata".
Quando cambieremo la classe Activity padre in AppCompatActivity il messaggio di errore scomparirà.
Articoli simili
- Cosa può fare Huawei per superare il problema attuale e come possono risolvere il problema con il dipartimento di stato?
- Come si chiama un metodo principale in un altro metodo principale di classe in Java?
- Come possiamo chiamare il metodo service dal metodo doGet o doPost nella servlet?
- Ho un problema con il mio PUBG. Gioco sulla versione Android, ma ogni volta che sparo con il mirino, si alza. Come posso risolvere il problema?