onTouchEvent в диалоге - PullRequest
       18

onTouchEvent в диалоге

1 голос
/ 08 ноября 2011

Я реализовал кнопку onLongClickListener в Android Dialog, которая автоматически уменьшает число с помощью таймеров. Вот код

myIncreaseTimer = new Timer();
final Runnable runnable_decrease = new Runnable() {
    public void run() {
        int txt = Integer.parseInt(length.getText().toString());
        txt -= 1;
        length.setText(String.valueOf(txt));
        if (txt == 0) {
            myIncreaseTimer.cancel();
            myIncreaseTimer.purge();
            myIncreaseTimer = new Timer();
        }
    }
};
btnMinus.setOnLongClickListener(new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        myIncreaseTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(runnable_decrease);
            }
        }, 0, 300);
        return true;
    }
});

Когда я нахожусь в деятельности, а не в диалоге, я могу остановить уменьшение с помощью onTouchEvent, когда пользователь касается экрана

@Override 
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        myIncreaseTimer.cancel();
        myIncreaseTimer.purge();
        myIncreaseTimer = new Timer();
    }
    return true;
}

Однако я не могу сделать это в диалоговом окне. Более того, диалог не имеет onTouchEvent.

Кто-нибудь знает, как я могу реализовать onTouchEvent в Dialog или где я должен остановить таймер увеличения в Dialog?

Ответы [ 2 ]

4 голосов
/ 08 ноября 2011

Вы не можете обрабатывать onTouch в диалоге, поэтому

Создайте действие, внедрите в него onTouchListener и в файле манифеста

<activity android:theme="@android:style/Theme.Dialog">

Итак, теперь вашактивность выглядит как DialogBox,

2 голосов
/ 08 ноября 2011

, поскольку Dialog не предназначен для обработки необработанных onTouchEvents.рассмотрите возможность создания действия, которое будет выглядеть как диалог (прозрачная тема, без заголовка) и переопределите его методом onTouchEvent.

...