Android tableview ведет себя как список - PullRequest
0 голосов
/ 18 декабря 2009

Я использую макет таблицы для отображения данных, но я хочу, чтобы он вел себя как элементы списка (возможность выбора, при выборе изменить фон, при нажатии, с эффектом наведения, возможность нажатия) для этой цели я использую следующих слушателей

  • OnClickListener(to perform action)
  • OnFocusChangeListener(To change background color)
  • OnTouchListener(to focus specific row)

Теперь проблема в том, что когда пользователь касается какого-либо элемента, он сначала получает фокус, а затем снова должен коснуться, чтобы вызвать событие onclick, чтобы исправить это, я внес изменение и включил действие, связанное с определенным рядом строки.

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_UP){
        v.requestFocus();
        int viewId= v.getId();
        handleEvent(viewId);//Switch cases to perform row specific actions.
    }
    return false;
}

теперь, если пользователь трогает событие строки, оно срабатывает, что работает отлично, но возникает еще одна проблема, когда даже пользователь хочет прокрутить данные вниз, перетаскивая палец на экран. ontouch событие запускается .... и действие автоматически выполняется, хотя пользователь думает, что это будет scroll down экран.

1 Ответ

1 голос
/ 18 декабря 2009

Я не знаю, применимо ли это решение в вашем случае, но, возможно, вы можете сделать так: Давайте предположим, что пользователь щелкнул ваш элемент (поэтому, вероятно, вы получите последовательность трех событий для вашего метода OnTouch (): ACTION_ DOWN, ACTION_ MOVE (не обязательно) и ACTION_UP. Теперь вы можете реагировать соответствующим образом.

  1. Если это ACTION_DOWN, вы можете сохранить координаты x и y.
  2. Если это ACTION_ MOVE, возьмите его x и y и вычислите расстояние от соответствующего ACTION_DOWN. Если оно длиннее некоторого предполагаемого значения, сделайте прокрутку и установите флаг, указывающий, что элементы были прокручены.
  3. Если это ACTION_UP, проверьте ваш флаг. Если предметы не были прокручены, запустите действие и снимите флажок.

Возможно, вычисления не то, что вы должны делать в событии ACTION_MOVE, потому что это должно быть быстро, но попробуйте.
Привет!

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