2015-08-05 2 views
0

Я хочу иметь поведение x, когда я нажимаю элемент и поведение y, когда я нажимаю и удерживаю один и тот же элемент. Кажется, я могу сделать то или другое, но не то, и другое.Android ListView setOnItemLongClickListener работает, но setOnItemClickListener не

Итак, у меня есть это Listview lv. В onCreate я даю это

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.v(TAG, "click position: " + position); 
     } 
    }); 

И когда я нажимаю любую деталь в моем ListView я получаю журнал.

Скажем, я удаляю setOnItemClickListener. И теперь я добавляю:

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) { 
      Log.v(TAG, "long click position: " + position); 
      return true; 
     } 
    }); 

Когда я делаю длинный щелчок (нажмите и удерживайте в течение 3 секунд), я получаю журнал. Ура.

Но, если я попытаюсь использовать оба вместе, то setOnItemLongClickListener затмевает setOnItemClickListener. onItemClick никогда не вызывается, и только когда я делаю длинный щелчок, я получаю строку в журнале.

XML-держит элементы в ListView имеет как:

android:longClickable="true" 
android:clickable="true" 

Что фундаментальное понятие о том, что я пытаюсь сделать, я получил не так?

+0

Вы установили какой-либо прослушиватель кликов в вашем адаптере? Или у вас есть кнопка или флажок в элементе списка? Можете ли вы опубликовать свой XML-код и код адаптера элемента списка? –

+0

Адаптер, который я использую, не имеет слушателей. В элементе списка есть только 2 TextView. – hazyred

+0

Код отлично работает здесь, может быть, это проблема в ваших текстовых комментариях, возможно, они запрашивают фокус или что-то, что предотвращает события onClick – SaNtoRiaN

ответ

0

Как ни странно, из XML, содержащий мои пункты ListView я удалил следующее:

android:longClickable="true" 
android:clickable="true" 

И теперь оба слушатели работают, как я собирался их!

0

Если все остальное не удается, вы можете использовать onTouch в списке и использовать 2 потока для обработки длинных касаний и коротких касаний. Это становится намного больнее, но именно так я создал список перетаскивания dragNdrop и проведите по экрану, чтобы удалить listview. Надеюсь, это даст вам возможность решить эту проблему.

+0

Если все остальное терпит неудачу, что-то вроде этого будет моим планом B :). Я хочу сначала попытаться понять, что я сделал не так с этим подходом. – hazyred

+0

Я не думаю, что вы делаете что-то неправильно. Я смутно помню, что это проблема для меня, я пробовал все, что мог, пока я просто не сказал, забыл об этом и сделал поток. Такая боль, но насколько я знаю, 2 кликера будут конфликтовать, а одна не будет работать. GL! – Daedalus