QNA > C > Come Si Può Risolvere Il Problema Del Metodo Deprecato In Android Studio?

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

Di Corene Vanderschaege

WhatsApp è davvero criptato end-to-end? :: Qual è la soluzione al problema dell'errore Java dell'applicazione Meis?
Link utili