-1

Здравствуйте, я все еще разрабатываю приложение для Android. Раньше я создал список с прослушивателем OnTouch для прокрутки и двойного нажатия и OnItemLongClick для выполнения перетаскивания. Это было с простым, просто содержащим textview. Теперь я перешел на пользовательскую строку listview с текстовым изображением и кнопкой. При такой конфигурации можно использовать только одно из обоих распознаваний жестов. Когда я устанавливаю android: longcickable to true, возможно перетаскивание, но он не обнаруживает OnTouch. Это работает и наоборот. У кого-нибудь есть решение использовать оба обнаружения жестов?Android listview как с onTouch, так и с onItemLongClick listener

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
    android:id="@+id/rowTextView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:textSize="16sp" > 
    </TextView> 

    <ImageButton 
    android:id="@+id/rowImgButton" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:background="#ffff00" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:layout_alignRight="@+id/rowTextView" /> 

</RelativeLayout> 
+0

Вы можете использовать GestureDetector в onTouchListener для обнаружения longPresses –

+0

@ I-I Я попытался использовать onLongPress, но этот жест должен начать действие перетаскивания. Это невозможно с onLongPress. – NiAu

+0

Не совсем понятно, что вы пытаетесь сделать. Это может помочь, если вы разместите код того, над чем работаете. –

ответ

1

Это может работать, вы можете создать GestureDetector:

myGestureDetector = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public void onLongPress(MotionEvent e) { 
       //Handle long press 
      } 
     }); 
myGestureDetector.setIsLongpressEnabled(true); 

, а затем в вашем методе onTouch:

public boolean onTouch (View v, MotionEvent event) { 
    myGestureDetector.onTouchEvent(e); 
    ... 
} 

Затем, когда пользователь выполняет длительное нажатие, в onLongPress метод должен срабатывать