После выполнения метода переменная обнуляется
в коде ниже осуществляется проверка того, что переменная count_m_shop равняется 0 после выполнения
сокращенный Java код:
public class Menu_of_levels extends AppCompatActivity {
public int count_m_hair_cut;
public int count_m_shop;
public int count_m_gun_shop;
public int count_m_clothes_shop;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_of_levels);
text=findViewById(R.id.textView);
ImageButton button_shop = (ImageButton) findViewById(R.id.button_shop);
button_shop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
count_m_gun_shop=0;
count_m_clothes_shop=0;
count_m_shop=1;
if(count_m_shop==1){
text.setText("в методе переменная равна 1");
}
}
});
if (count_m_shop==1){
text.setText(text.getText()+" переменная все еще равна 1");
}
}
}
в итоге при нажатии (и до него) в эмуляторе на соответствующую кнопку выводилось лишь "в методе переменная равна 1"
Помогите, пожалуйста
Ответы (3 шт):
По итогу обработку нажатий как я и говорил лучше сделать так:
button_shop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
count_m_gun_shop=0;
count_m_clothes_shop=0;
if(count_m_shop==1){
text.setText("в методе переменная равна 1");
}else{
count_m_shop=1;
}
}
});
и вот этот кусок кода:
if (count_m_shop==1){
text.setText(text.getText()+" переменная все еще равна 1");
}
не выполнится никогда при условии что вы не выложили сюда код без присваивания через intent переменной значение 1. В противном случае его можно убрать/изменить. Также можно вместо цифрового отображения нажатий использовать булевскую переменную типа:
boolean isPressed = false;
button_shop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
count_m_gun_shop=0;
count_m_clothes_shop=0;
if(isPressed){
text.setText("в методе переменная равна 1");
}else{
isPressed = true;
}
}
});
Переменная не обнуляется - она изначально равна нулю и на момент проверки всё ещё равна нулю. Почему? - потому что проверка выполняется в методе onCreate(), который выполняется при запуске активности и в этот момент ваша кнопка ещё даже не появилась на экране. По кнопке вы кликнете когда-нибудь потом и только тогда переменная изменится, потому что она изменяется не в onCreate(), а в onClick(). Если не понятно о чём я - добавьте после условия:
if (count_m_shop==1){
text.setText(text.getText()+" переменная все еще равна 1");
}
text.setText(text.getText() + " переменная равна " + count_m_shop + ", а onCreate уже кончился");
Правило таково: всё что вы хотели сделать после нажатия на кнопку - следует делать в её обработчике onClick() (так же не возбраняется описать логику в отдельном методе и вызвать его из обработчика).
У вас и при нажатии выводилась что переменная равна 1 потому что вы переменную count_m_shop=1; прописали в обработчик нажатий а не до него, а до этого у переменной count_m_shop было значение null а не 0. Предполагаю вам нужно так:
public class Menu_of_levels extends AppCompatActivity {
public int count_m_hair_cut;
public int count_m_shop;
public int count_m_gun_shop;
public int count_m_clothes_shop;
TextView text;
ImageButton button_shop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_of_levels);
text=findViewById(R.id.textView);
button_shop = findViewById(R.id.button_shop);
button_shop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
count_m_gun_shop = 1;
count_m_clothes_shop = 1;
if(count_m_shop != 0){
text.setText("в методе переменная равна 1");
}
}
});
getNumber();
}
private void getNumber() {
count_m_hair_cut = 0;
count_m_shop = 0;
count_m_gun_shop = 0;
count_m_clothes_shop = 0;
}
}