Проверка первого нажатия на кнопку

Рейтинг: 2Ответов: 2Опубликовано: 03.05.2015

Как проверить, нажата ли кнопка в первый раз?

Ответы

▲ 4Принят

Устанавливаете флаг нажатия и проверяете его - нажималась кнопка или нет. При нажатии на кнопку флагу присваиваете значение true:

boolean isPressed = false; // флаг проверки нажатия, false - не нажималась
....
if (isPressed) {     //проверка нажималась или нет

 // действия, когда кнопка нажималась хотя бы раз

}
....  
@Override 
public void onClick(View view) {
 isPressed = true;
 .... // другие функции при нажатии на кнопку
}

Если первое нажатие необходимо запомнить и после закрытия приложения, записываете значение isPressed в SharedPreferences и при старте читаете сохранённое значение, в onClick() записываете результат:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);

          //Получаем значение флага. 
          //Если ни разу не нажималась, то такой записи нет и значение по дефолту false

    boolean isPressed = sp.getBoolean("isPressed", false);


    if (isPressed) {

        // действия , если кнопка нажималась хотя бы раз

    }

   @Override 
     public void onClick(View view) { // обработчик клика по кнопке,которую проверяем
       Editor e = sp.edit();
        e.putBoolean("isPressed", true);
        e.commit(); 

     .... // другие функции при нажатии на кнопку
   }

Второе решение наиболее универсально, не требует дополнительного сохранения в onSaveInstanceState() и помнит состояние и после закрытия приложения.

▲ 1

Если надо проверить это на конкретном экране (Activity) то можно так:

1) Завести переменную типа boolean, коя на момент запуска Activity будет равна false

2) При нажатии на кнопку проверять её значение и если она false (т.е. кнопка нажата впервые), то присвоить ей true. Теперь каждой следующее нажатие будет явно не первым.

3) Сохранять\ восстанавливать значение этой переменной в onSaveInstanceState() и onRestoreInstanceState() методах активити.

Если же вдруг надо определить первое нажатии кнопки вообще, то указанную выше переменную можно хранить в SharedPreferences или на сервере.