Android: длительное нажатие кнопки → выполнение действий
Я хочу использовать ту же кнопку для выполнения двух разных методов.
Один из методов, когда пользователь нажимает один клик и второй метод (другой), когда пользователь LONG нажимает на него.
Я использую это для одного короткого щелчка (который отлично работает):
Button downSelected = (Button) findViewById(R.id.downSelected);
downSelected.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
method();
}
}
});
Я попытался добавить longClickListener, но это не сработало.
Оцените любые идеи о том, как решить эту проблему.
Спасибо!
Ответы
Ответ 1
Я делал это раньше, я просто использовал:
down.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
return true;
}
});
В документации:
public void setOnLongClickListener (View.OnLongClickListener l)
С: API Уровень 1 Зарегистрировать обратный вызов для вызова, когда это представление нажмите и удерживайте. Если это мнение не длинный кликабель, он становится длинным кликабельны.
Обратите внимание, что для этого требуется вернуть логическое значение, это должно работать.
Ответ 2
Чтобы обе функции работали над кликабельным изображением, которое будет реагировать как на короткие, так и на длинные клики, я попробовал следующее, что, кажется, отлично работает:
image = (ImageView) findViewById(R.id.imageViewCompass);
image.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
shortclick();
}
});
image.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
longclick();
return true;
}
});
//Затем функции, которые вызывают:
public void shortclick()
{
Toast.makeText(this, "Why did you do that? That hurts!!!", Toast.LENGTH_LONG).show();
}
public void longclick()
{
Toast.makeText(this, "Why did you do that? That REALLY hurts!!!", Toast.LENGTH_LONG).show();
}
Кажется, что простой способ объявить элемент в XML как интерактивный, а затем определить функцию для вызова по клику, применим только к короткому клику - у вас должен быть слушатель, чтобы различать короткие и длинные клики.
Ответ 3
Изначально, когда я реализовал longClick и щелкнул два отдельных события, проблема была в том, что когда я имел длинный клик, приложение также выполняло действие, которое нужно выполнить для простого нажатия. Решение, которое я понял, заключалось в том, чтобы изменить тип возвращаемого значения longClick на true, который по умолчанию обычно является ложным. Измените его, и он отлично работает.
Ответ 4
Другой метод:
private void donwloadImageLongClick(ImageView imageView) {
imageView.setOnTouchListener(new View.OnTouchListener() {
long then = System.currentTimeMillis();
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
long then = System.currentTimeMillis();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
if ((System.currentTimeMillis() - then) > 3000) {
Toast.makeText(mContext, "Button touch", Toast.LENGTH_SHORT).show();
return true;
}
}
return false;
}
});
}
Ответ 5
Попробуйте использовать прослушиватель ontouch вместо кликера.
http://developer.android.com/reference/android/view/View.OnTouchListener.html