web-dev-qa-db-fra.com

Le message "Le champ peut être converti en variable locale" apparaît lors de la définition de la couleur Android ActionBar

Après avoir défini la couleur de la barre d'actions, actionBarColor dans private String actionBarColor = "#B36305"; est surligné en jaune et un avertissement est renvoyé pour une raison quelconque. Que peut-on faire pour se débarrasser de cet avertissement?

Le champ peut être converti en une variable locale

public class MainActivity extends AppCompatActivity {

    private String actionBarColor = "#B36305";

    private int getFactorColor(int color, float factor) {
        float[] hsv = new float[3];
        Color.colorToHSV(color, hsv);
        hsv[2] *= factor;
        color = Color.HSVToColor(hsv);
        return color;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_activity_main);

        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(actionBarColor)));
        }
    }
}
29
MacaronLover

L'avertissement vous indique que actionBarColor ne doit pas être une variable globale (c'est-à-dire un champ), car il n'est utilisé que dans une seule méthode (onCreate). C'est un bon conseil: vous devez toujours minimiser la portée de vos variables, car cela améliore la lisibilité et réduit les possibilités d'erreurs de programmation.

Pour vous débarrasser de l'avertissement, corrigez le problème en déclarant la variable dans onCreate:

final String actionBarColor = "#B36305";

if(actionBar != null) {
    actionBar.setBackgroundDrawable(
        new ColorDrawable(Color.parseColor(actionBarColor)));
}
32
Mick Mnemonic

Si vous savez que vous utiliserez la ou les variables, ajoutez en haut de votre classe:

@SuppressWarnings("FieldCanBeLocal")