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

#android #textview

#Android #textview

Вопрос:

Я создаю довольно бессмысленное приложение для Android, в котором есть две кнопки и два текстовых представления.

Для счетчика int установлено значение 0.

Первая кнопка с именем add добавляет 1 к счетчику, вторая кнопка с именем sub вычитает единицу из счетчика.

Если счетчик больше 1, отображается текстовое представление totalPlus с текущим значением счетчика.

Если счетчик равен 0 или меньше, отображается totalMinus textview с текущим значением счетчика.

В обоих случаях нерелевантный textview скрыт.

Проблема, с которой я сталкиваюсь, заключается в том, что, скажем, у меня 5, будет показан верхний счетчик, и он будет увеличиваться, когда я нажимаю кнопку. Но если я нажимаю кнопку вычитания, текущее текстовое представление скрывается, пока я не получу значение 0 или меньше, в котором отображается minusTextView. Это работает в обоих направлениях.

[код]

     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    counter = 0;
    add = (Button) findViewById(R.id.bAdd);
    sub = (Button) findViewById(R.id.bSub);
    totalPlus = (TextView) findViewById(R.id.totalPlus);
    totalMinus = (TextView) findViewById(R.id.totalMinus);

    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            counter  ;

            if (counter > 1)

               totalPlus.setVisibility(View.VISIBLE);
               totalMinus.setVisibility(View.INVISIBLE);
               totalPlus.setText("Your Total is "   counter);

        }
    });
    sub.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            counter--;

            if (counter <0)

               totalMinus.setVisibility(View.VISIBLE);
               totalPlus.setVisibility(View.INVISIBLE);
               totalMinus.setText("Your Total is "   counter); 
        }
  

Комментарии:

1. Ваши вызовы счетчика if не заключены в квадратные скобки, поэтому он выполняет вторую и третью инструкции, несмотря ни на что. Заключите содержимое if в квадратные скобки

Ответ №1:

Java игнорирует уровни отступов. Вам нужно использовать фигурные скобки вокруг всех трех операторов, которые вы хотите выполнить, если if оператор пройдет.

 if (counter <0) { // <-- this
    totalMinus.setVisibility(View.VISIBLE);
    totalPlus.setVisibility(View.INVISIBLE);
    totalMinus.setText("Your Total is "   counter);
} // <-- and this
  

Если вы не включаете эти фигурные скобки, Java рассматривает только первый оператор как часть if конструкции; два других оператора находятся за пределами этой конструкции и будут выполняться всегда.

Комментарии:

1. Спасибо! Вы говорите, что Java игнорирует уровни отступов. Существуют ли языки, которые этого не делают?

2. Python в некоторой степени.