Android / Java понимание, когда я могу использовать/перезаписать переменную



У меня есть переменная, которую я получаю из общих настроек при загрузке приложения.



Я сначала инициализирую переменную



 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String camera_type = booth_preferences.getString("camera_key", "back");


Затем в конце строки я получаю эту переменную и что-то с ней делаю



if(camera_type.equals("front")){
//do something
} else if(camera_type.equals("ext")){
//do something
} else {
//do something
}


Теперь, непосредственно после этого оператора if, у меня есть слушатель onclick, который должен изменить и обновить это предпочтение.

camera_button_front.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//do something
edit_preferences.putString(camera_key, "front").commit();
}
});
camera_button_back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//do something
edit_preferences.putString(camera_key, "back").commit();
}
});
camera_button_ext.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//do something
edit_preferences.putString(camera_key, "ext").commit();
}
});


Но когда я пытаюсь изменить переменную camera_type, я получаю ошибки, заявляющие "не могу присвоить значение конечной переменной "camera_type".



camera_button_ext.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//do something
edit_preferences.putString(camera_key, "ext").commit();
camera_type = "ext";
}
});


Я всегда восстанавливал переменную после onclick, надеясь, что она полностью перепишет переменную.



camera_button_ext.setOnClickListener(new View.OnClickListener() {
String camera_type;
public void onClick(View v) {
//do something
edit_preferences.putString(camera_key, "ext").commit();
camera_type = "ext";
}
});


Если я удалю final, то я не смогу использовать переменную в операторе if.



Я новичок в Java, поэтому это должен быть простой ответ, я просто не уверен, какую комбинацию ошибок я делаю.

343   3  

3 ответов:

Вы должны сделать свою переменную не конечным полем. Затем вы можете использовать его в onClick (и все другие методы класса), а также переназначить его по своему усмотрению.

private String camera_type; // member variable

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    camera_type = booth_preferences.getString("camera_key", "back");

Нельзя переназначить значение конечной переменной. Чтобы сделать его доступным внутри метода onClick, можно сделать camera_type переменной-членом вашей активности.

Вы можете сделать один элемент массивным

String[] cameraType = new String[0];

И использовать

if("some_String".equals(cameraType[0])){
//do smth
}

Comments

    Ничего не найдено.