Подтвердить что ты не робот

Сообщение "Поле может быть преобразовано в локальную переменную", появляющееся при настройке цвета панели действий

После установки цвета панели действий actionBarColor в private String actionBarColor = "#B36305"; подсвечивается желтым цветом и по какой-то причине возвращается предупреждение. Что можно сделать, чтобы избавиться от этого предупреждения?

Поле может быть преобразовано в локальную переменную

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)));
        }
    }
}
4b9b3361

Ответ 1

Что предупреждает вас, так это то, что actionBarColor не должна быть глобальной переменной (т.е. поле), потому что она используется только в одном методе (onCreate). Это хороший совет: вы всегда должны сводить к минимуму объем ваших переменных, поскольку он улучшает читаемость и уменьшает возможности программирования ошибок.

Чтобы избавиться от предупреждения, исправьте проблему, объявив переменную в onCreate:

final String actionBarColor = "#B36305";

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

Ответ 2

Если вы знаете, что будете использовать переменную (ы), добавьте в начало своего класса:

@SuppressWarnings("FieldCanBeLocal")

Ответ 3

Это не ошибка, из-за которой вы сталкиваетесь с ошибками lint, которые будут отображаться в переменной уровня класса, которая используется как локальная переменная. Перейдите и просто определите его как локальную переменную. Он будет работать

Например -

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);
}

мы используем переменную mtracker как локальную, поэтому мы должны объявить метод oncreate. Это устранит вашу ошибку.

Надеюсь, это поможет вам.