2015-05-17 2 views
0

У меня возникла большая проблема. Я сделал список. Но я хочу, чтобы режим просмотра списка выполнял некоторые операции, такие как длительное нажатие и касание, а также некоторые основные операции просмотра списка, такие как прокрутка вверх и вниз. Я стараюсь использовать setOnItemLongClickListener в виде списка для длинного нажатия и setOnTouchListener для прикосновения к действию. Но они плохо работают, особенно для setOnTouchListener с ACTION_UP. Когда я нажимаю экран на долгое время, а затем нажимаю вверх, вызывается OnItemLongClickListener, но onTouchListener не вызывается вообще. Кроме того, когда в списке есть несколько элементов, OnItemLongClickListener не будет срабатывать при нажатии внизу списка.Может ли два вида одного размера и в одном и том же месте одновременно работать на экране?

Итак, я попробовал другой способ. Я сделал кнопку с таким же размером списка и сделаю кнопку, чтобы действовать при длительном нажатии и пальце. Я сделал кнопку без фона и поместил ее в совпадение со списком. Но возникает другая проблема. Если кнопка находится вверху, просмотр списка не может перемещаться вверх и вниз. С другой стороны, если просмотр списка вверх, кнопка не может действовать при длительном нажатии и прикоснуться.

Кстати, я возвращаю false как в OnItemLongClickListener, так и в onTouchListener. Почему Android не отправляет действия экрана обоим представлениям в одном месте?

+0

«возвращают ложь» указывает на то, что метод обработал событие, и он должен остановиться здесь, следовательно, другие слушатели на то же событие не будет называться. верните true и попробуйте. – harshal

ответ

0

Вместо того, чтобы использовать два вида, я бы придерживался только списка, но, используя хороших слушателей, вы можете делать то, что хотите. Предполагая, что вы хотите метод actionUp(), вы можете вызвать его в конце классического ListView обратных вызовов, в вашем случае, это может быть:

lv.setOnItemLongClickListener(new OnItemLongClickListener() { ...call actionUp() at the end 

, а также в конце классической

lv.setOnItemClickListener(new OnItemClickListener() { ...call actionUp() at the end 

Как и в конце

lv.setOnScrollListener(new OnScrollListener() { 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     if(scrollState == SCROLL_STATE_IDLE) { 
      //if we went from SCROLL_STATE_TOUCH_SCROLL to SCROLL_STATE_IDLE then a touch up occured somehow 
      actionUp(); 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

    } 
}); 
Смежные вопросы