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, поэтому это должен быть простой ответ, я просто не уверен, какую комбинацию ошибок я делаю.
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