2015-09-15 3 views
2

Как субъект предполагает, setOnItemClickListener не работает, когда setOnLongClickListener используется, макет, я использую в базовом адаптере ниже,setOnItemClickListener не работает, когда setOnLongClickListener используется - Android

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:baselineAligned="false" 
       android:descendantFocusability="blocksDescendants" 
       android:paddingBottom="20dp" 
       android:paddingTop="5dp"> 


    <com.mikhaellopez.circularimageview.CircularImageView 
     android:id="@+id/image1" 
     android:layout_width="70dp" 
     android:layout_height="70dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="2dp" 
     android:focusable="false" 
     app:border_color="#EEEEEE" 
     app:border_width="4dp"/> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/contacts_grid_image" 
     android:layout_centerHorizontal="true" 
     android:focusable="false" 
     android:text="Name" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="11dp" 
     android:textStyle="bold"/> 

    <TextView 
     android:id="@+id/address" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/name" 
     android:layout_centerHorizontal="true" 
     android:focusable="false" 
     android:text="Mobile number" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="9dp"/> 


</RelativeLayout> 

, и я использую это,

image.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       ClipData.Item item = new ClipData.Item((CharSequence) v.getTag()); 
       String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN}; 

       ClipData dragData = new ClipData("test", mimeTypes, item); 

       MyDragShadowBuilder myShadow = new MyDragShadowBuilder(holder.image); 
       if (groups.size() > holder.position) { 
        v.startDrag(dragData, myShadow, null, 0); 

     return true; 
      } 
     }); 

и это,

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       Log.i(TAG, "clicked"); 

      } 
     }); 

Теперь, когда я нажимаю на изображение, элемент click не работает, но когда я нажимаю на текстовые представления, он работает, что я делаю неправильно?

Также обратите внимание, что когда я удаляю image.setOnLongClickListener(), весь элемент gridview снова становится интерактивным.

+0

Не могли бы вы уточнить свой вопрос? – Sridhar

+1

Попробуйте вернуть 'false' в' OnLongClickListener # onLongClick() ' –

+0

Я просто попробовал, что он не работает –

ответ

1

Это должно быть ожидаемое поведение для GridView, потому что дочернее представление доступно для кликов, хотя оно обрабатывает только OnLongClick.

В качестве обходного пути, вы можете

  1. setOnClickListener для ImageView выполнять те же действия, как вы бы в setOnItemClickListener
  2. рассмотреть вопрос об использовании setOnItemLongClickListener, но это будет влиять на весь RelativeLayout
  3. использование onTouchListener, но для этого потребуется больше работ