2014-12-10 2 views
0

Я пишу очень простое приложение с следующим сценарием:Отменить Сенсорный Eventbutt

1) Экраном A имеет 3 кнопки, чтобы перейти на другом экран.

2) Теперь, если я держу одну кнопку (например, кнопку 1) и выполняю быстрый щелчок на другой кнопке, тогда она запускает несколько экземпляров другого экрана. Который, я думаю, не должен быть. Как это можно предотвратить.

3) и это более странно. После перехода на другой экран, если я не отпущу Button 1, который был на Экран A, тогда он по-прежнему позволяет выполнить щелчок для останова двух кнопок Экран A даже я вижу второй экран.

Здесь ясно, что запускается второй экран, но все еще работает на первом экране. Любая идея, как избежать такого сценария.

+0

'запускать несколько экземпляров другого экрана. Который, я думаю, не должен быть. Как это можно предотвратить. «Пожалуйста, покажите свой код? –

+0

напишите свой код. –

+0

@Outofmemory Hardik. Вы можете найти эту проблему в большинстве стандартных приложений. Я проверил с помощью FB_ и YahooNews_ app .. вам просто нужно удерживать любую кнопку и просто нажимать любую другую кнопку ... и продолжать нажимать, даже если вы находитесь на другой странице (условие такое же..делает одну кнопку экрана). – CoDe

ответ

0

Одно решение, которое я нашел, чтобы отключить щелчок слушателя в OnPause() и включить его в onResume(). Можем ли мы лучше поддерживать это?

0

Как вы собираетесь отключать другие кнопки при включенном 1, это проблема с алгоритмом. Вы можете попытаться создать логическую или управляющую переменную в своей деятельности (а затем передать окончательную ссылку на активность туда, где она вам нужна) или в статическом контексте. Но чтобы ответить на заголовок вопроса - вы можете «Отменить событие касания» либо путем добавления OnTouchListener, либо если вы расширяете класс Button, вы можете переопределить метод onTouchEvent(MotionEvent ev).

Использование OnTouchListener отключит любое ранее определенное поведение сенсорного события. Вы можете вызвать фактическое событие клика изнутри, вызвав метод performClick с вашей кнопки.

//in order to use button inside OnTouchEvent, its reference must be final 
//if it's not, create a new final reference to your button, like this: 
final finalButton = button; 

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     // ... additional code if necessary 
     if(canBeClicked) { 
      finalButton.performClick(); 
      return true; 
     } 
     else return false; 
    } 
} 

Переопределение onTouchEvent в классе, расширяющем Button, должно выглядеть примерно так.

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // ... additional code if necessary 

    //here we don't really need to call performClick(), although API recommends it 
    //we just send the touch event to the super-class and let it handle the situation. 
    if(activity.canBeClicked) return super.onTouchEvent(ev); 
    else return false; 
} 
Смежные вопросы