Después de ajustar el color de la Barra de Acción, actionBarColor en private String actionBarColor = "#B36305"; que se resalta en amarillo y se devuelve una advertencia por alguna razón. ¿Qué se puede hacer para deshacerse de esta advertencia?

Campo puede ser convertida a una variable local

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)));
        }
    }
}
  • ¿cuál es la importancia de esta advertencia? Me refiero a lo problemática que puede ser de rendimiento o el uso de la memoria aspecto , si la izquierda no controlada..?
InformationsquelleAutor MacaronLover | 2015-07-29

3 Comentarios

  1. 31

    Lo que la advertencia está diciendo es que actionBarColor no debería ser una variable global (es decir, un campo), porque sólo se utiliza en un método (onCreate). Este es un buen consejo: siempre se debe minimizar el alcance de las variables, debido a que mejora la legibilidad y reduce las posibilidades de errores de programación.

    Para deshacerse de la advertencia, solucionar el problema declarando la variable dentro de onCreate:

    final String actionBarColor = "#B36305";
    
    if(actionBar != null) {
        actionBar.setBackgroundDrawable(
            new ColorDrawable(Color.parseColor(actionBarColor)));
    }
    • Cómo acerca de constantes? Me gusta que declarar en la parte superior de mi clase.
    • sí, usted puede declarar en el nivel de clase (private|public static final String), y hacer así que no se debe de ver esta advertencia.
    • Todavía se me pone la advertencia. Voy a ignorar que para este caso de uso gracias.
  2. 50

    Si usted sabe que usted va a utilizar la variable(s), añadir a la parte superior de su clase:

    @SuppressWarnings("FieldCanBeLocal")

    • esto es lo que yo necesitaba. Tengo un campo. en puede se han convertido en una variable local, pero fue utilizado en el interior de un bucle y no quería volver a inicializar una y otra vez cada vez que el bucle se ejecuta
    • Sólo una nota, a menudo esto es necesario si el campo se agrega a un objeto que gestiona sus containees el uso de referencias débiles. Si se convierte a una variable local será el recolector de basura.
    • Gracias tipo sir +1
    • Esta es la respuesta correcta. La legibilidad es mejores cuando la magia de los números y cadenas se declara en la parte superior de la clase, y private static hace constantes que es aún más claro.
    • GRACIAS !!! (mucho!) en la mía la he necesitado más tarde en algunos de auto reflexión
    • Yo vine para que explícitamente!

  3. -1

    Esto no es un error, este es waring cuando usted entra en el pelusa errores que se muestran en el nivel de clase de la variable que se utiliza como una variable local. Ir y simplemente lo definen como una variable local. Se Trabaja

    Por ejemplo –

    private Tracker mTracker, mTracker2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GoogleAnalytics mInstance = GoogleAnalytics.getInstance(this);
        mTracker = mInstance.getDefaultTracker();
        mTracker2 = mInstance.getTracker(URL.ANALYTIC);
        mInstance.setDefaultTracker(mTracker2);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.actress_about_detail);
    }

    utilizamos mtracker variable como local, así que tenemos que declarar en el método oncreate. Esto va a resolver el error.

    Espero que esto le ayudará.

    • Pero no ha declarado en onCreate…

Dejar respuesta

Please enter your comment!
Please enter your name here