После выполнения метода переменная обнуляется

в коде ниже осуществляется проверка того, что переменная 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 шт):

Автор решения: Andrew

По итогу обработку нажатий как я и говорил лучше сделать так:

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;
            }
        }
    });
→ Ссылка
Автор решения: woesss

Переменная не обнуляется - она изначально равна нулю и на момент проверки всё ещё равна нулю. Почему? - потому что проверка выполняется в методе onCreate(), который выполняется при запуске активности и в этот момент ваша кнопка ещё даже не появилась на экране. По кнопке вы кликнете когда-нибудь потом и только тогда переменная изменится, потому что она изменяется не в onCreate(), а в onClick(). Если не понятно о чём я - добавьте после условия:

        if (count_m_shop==1){
             text.setText(text.getText()+"  переменная все еще равна 1");
        }
        text.setText(text.getText() + "  переменная равна " + count_m_shop + ", а onCreate уже кончился");

Правило таково: всё что вы хотели сделать после нажатия на кнопку - следует делать в её обработчике onClick() (так же не возбраняется описать логику в отдельном методе и вызвать его из обработчика).

→ Ссылка
Автор решения: Buratino Apps

У вас и при нажатии выводилась что переменная равна 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;
    }
}
→ Ссылка