Табличное представление Android ведет себя как список

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

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

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

@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 экран.


person d-man    schedule 18.12.2009    source источник


Ответы (1)


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

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

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

person Ramps    schedule 18.12.2009