GridView проблемы с сенсорными списками - PullRequest
1 голос
/ 21 февраля 2011

Я пытаюсь создать пользовательский GridView, но у меня проблемы с сенсорными слушателями.

Что я хочу сделать:

  • Создать GridView с пользовательскими Views.
  • Нажмите и удерживайте элемент, чтобы он стал «редактируемым».
  • Перетащите вид по горизонтали или вертикали, чтобы переместить его положение в GridView.

Вот где у меня проблемы:
Я реализую GestureDetector.OnGestureListener для функций longpress, потому что по какой-то причине использование gridview.setOnItemLongClickListener() не работает при переопределении onTouchEvent() самого GridView (что мне нужно для перетаскиваемой части). Так что все хорошо на этом этапе. Теперь мне нужно знать только, когда закончится длинное нажатие. Поэтому я думаю: «Ну, это не должно быть трудно». Я не мог быть более неправильным. Я довольно долго возился с этим, и похоже, что использование разных сенсорных событий мне не помогает: /
Проходя через onTouchEvent(), я заметил, что дается только 1 действие: MotionEvent.ACTION_DOWN. Так что я делаю не так? мне нужно MotionEvent.ACTION_UP ...

1 Ответ

2 голосов
/ 21 февраля 2011

Обнаружил виновника:

Я делал что-то подобное

@Override
public boolean onTouchEvent(MotionEvent event) {

    // Give everything to the gesture detector
    boolean retValue = gestureDetector.onTouchEvent(event);

    switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE :
            onMove();
            break;
        case MotionEvent.ACTION_UP :
            onUp();
            break;
        case MotionEvent.ACTION_CANCEL:
            onCancel();
            break;
    }
    return retValue;
}  

Я думаю, retValue всегда возвращал false, поэтому другие события не были вызваны.
это исправиловыпуск:

@Override
public boolean onTouchEvent(MotionEvent event) {

    // Give everything to the gesture detector
    gestureDetector.onTouchEvent(event);

    switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE :
            onMove();
            break;
        case MotionEvent.ACTION_UP :
            onUp();
            break;
        case MotionEvent.ACTION_CANCEL:
            onCancel();
            break;
    }
    return true;
}
...