Android: долгое нажатие на кнопку -> выполнять действия - PullRequest
55 голосов
/ 09 декабря 2010

Я хочу использовать одну и ту же кнопку для выполнения 2 разных методов. Один метод, когда пользователь щелкает его одним щелчком мыши, и второй метод (другой), когда пользователь нажимает его ДЛИНО.

Я использую это для одного короткого щелчка (который прекрасно работает):

Button downSelected = (Button) findViewById(R.id.downSelected);
        downSelected.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                method();
                }
            }

        });

Я пытался добавить longClickListener, но он не работал.

Ценю любые идеи о том, как решить эту проблему.

Спасибо!

Ответы [ 4 ]

107 голосов
/ 09 декабря 2010

Я делал это раньше, я просто использовал:

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 Зарегистрируйте обратный вызов, который будет вызываться при нажатии и удерживании этого представления.Если это представление не кликабельно долго, оно становится кликабельно долго.

Обратите внимание, что требуется вернуть логическое значение, это должно работать.

17 голосов
/ 07 декабря 2013

Чтобы обе функции работали для кликабельного изображения, которое будет реагировать как на короткие, так и на длинные щелчки, я попробовал следующее, которое, кажется, отлично работает:

    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 активным, а затем определить функцию, вызываемую по клику, относится только к коротким щелчкам - у вас должен быть слушатель, чтобы различать короткие и длинныещелчки.

16 голосов
/ 25 декабря 2011

Первоначально, когда я реализовал longClick и щелчок для выполнения двух отдельных событий, проблема, с которой я столкнулся, заключалась в том, что, когда у меня был longclick, приложение также выполняло действие, которое нужно выполнить для простого щелчка. Решение, которое я понял, состояло в том, чтобы изменить тип возвращаемого значения longClick на true, которое обычно по умолчанию равно false. Измените это, и оно отлично работает.

0 голосов
/ 09 декабря 2010

Попробуйте использовать слушатель касания вместо прослушивателя кликов.

http://developer.android.com/reference/android/view/View.OnTouchListener.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...