2014-02-19 6 views
5

Я хочу добавить кнопку в мое приложение в Android и зафиксировать событие на этой кнопке (onclick) через пару секунд, нажав кнопку, так что она не реагирует на первое касание , Можно ли это сделать на Android?Захват события на Android через несколько секунд

Прямо сейчас у меня есть следующий код, который фиксирует onclick на домашней кнопке (в ActionBar).

public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     showSendLogAlert(); 
    } 

    return super.onOptionsItemSelected(item); 
} 

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

Решение:

На основе комментариев ниже я получил этот рабочий раствор:

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    // stuff 

    // Set the home button clickable 
    getActionBar().setHomeButtonEnabled(true); 

    // Define a long click listener instead of normal one 
    View homeButton = findViewById(android.R.id.home); 
    homeButton.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      showSendLogAlert(); 
      return false; 
     } 
    }); 

    // more stuff 
} 
+1

у вас спрашивают о longclick() прослушиватель – CoolMonster

+0

@CoolMonster Я не мог найти имя этого конкретного события, спасибо! это именно то, что я имел в виду. – maqjav

+0

просто упоминайте, что есть прослушиватель longclikc, но не точное имя слушателя – CoolMonster

ответ

3

Я сделал что-то подобное, но в моем случае я хотел показать новое действие, если бы кнопка была нажата непрерывно в течение 3 секунд. Используйте этот код для справки.

Runnable mRunnable,timeRunnable; 
Handler mHandler=new Handler(); 

btnBackoffice = (Button) findViewById(R.id.btn_backoffice); 

btnBackoffice.setOnTouchListener(buttonOnTouchListener);  

private OnTouchListener buttonOnTouchListener = new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      mHandler.postDelayed(timeRunnable, 3000); 
      break; 
     case MotionEvent.ACTION_UP: 
      mHandler.removeCallbacks(timeRunnable); 
      break; 
     } 
     return true; 
    } 
}; 

timeRunnable=new Runnable(){ 
     @Override 
     public void run() { 
      Intent intent = new Intent(MainActivity.this, BackofficeActivity.class); 
      startActivity(intent); 

     } 
    }; 

Надеюсь, это поможет.

+1

Спасибо, вот что я искал. В моем случае я оставил задержку по умолчанию слушателя, но его хорошо знать, как реализовать и конкретную задержку. – maqjav

0

В вашем onClickListener для кнопки:

myButton.setEnabled(false); 

Timer buttonTimer = new Timer(); 
buttonTimer.schedule(new TimerTask() { 

@Override 
public void run() { 
    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      myButton.setEnabled(true); 
     } 
    }); 
} 
}, 5000)); 

Это отключит кнопку, когда нажмите и снова включите его через 5 секунд (5000 - это задержка 5 секунд).

Если событие click обрабатывается в классе, которое расширяет представление, а не в Activity, делайте то же самое, но замените runOnUiThread на сообщение.

+0

Неплохая реализация, но я думаю, что использование longClickListener - более чистый подход. Благодаря! – maqjav