2013-02-05 47 views
0

我知道有一些話題討論這種行爲,但我沒有看到有我可以使用的解決方案。ListView與BaseAdapter沒有響應OnLongClickListener

問題是以下,我有一個列表視圖,它使用實現OnLongClickListener的BaseAdapter。在GetView方法中,我將每個視圖的onLongClickListener設置爲這個 - 但是長按不會被捕獲。另外,我將onClickListener中的每個項目設置爲實現OnClickListener的不同項目,並且它確實捕獲了click事件,當我嘗試使用longClick事件做同樣的事情時,它仍未捕獲到長按事件。

一點代碼:

public class ListOfCustomersAdapter extends BaseAdapter implements OnLongClickListener 
{ 

... 

public View getView(int position, final View convertView, ViewGroup parent) { 


    vi.setOnClickListener(item); // works 
    vi.setOnLongClickListener(this); // doesn't works 
} 


} 

的項目是實現OnClickListener

EDIT 1類的一個實例:

視圖VI是含有若干意見的FrameLayout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/selector_item" 
android:descendantFocusability="blocksDescendants" > 

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 


    <include 
     android:id="@+id/details_container" 
     layout="@layout/list_message_my_details" 
     android:paddingRight="6dp" /> 

    <include 
     android:id="@+id/details_container" 
     layout="@layout/list_message_responder_details" /> 

    <LinearLayout 
     android:id="@+id/text_container" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="@dimen/list_message_margin_left" 
     android:layout_marginRight="@dimen/list_message_margin_right" 
     android:orientation="vertical" 
     android:paddingTop="55dp" > 

     <TextView 
      android:id="@+id/message_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:background="@color/white" 
    android:paddingBottom="@dimen/message_with_attached_channel_item_bottom_minus_padding" 
       android:paddingTop="@dimen/message_with_attached_channel_item_bottom_minus_padding" 
      android:textColor="@color/mobli_dark" /> 

     <FrameLayout 
      android:id="@+id/text_seperator" 
      android:layout_width="fill_parent" 
      android:layout_height="1px" 
      android:background="@color/mobli_dark_20" 
      android:visibility="gone" > 
     </FrameLayout> 
    </LinearLayout> 
</FrameLayout> 

編輯2:

公共查看getView(INT位置,最後查看convertView,ViewGroup以及母公司){

View vi = convertView; 
    ItemType item = items.get(position); 

    if (item.getType() == null) 
     vi = new TextItemType(context, item); 
    else if (item.getType() == 1) 
     vi = new ColorItemType(context, item); 
    else if (item.getType() == 2) 
     vi = new BoldItemType(context, item); 
    else if (item.getType() == 3) 
     vi = new FlatItemType(context, item); 


    vi.setTag(item.getId()); 
    vi.setOnLongClickListener(this); //doesn't work 
    vi.setOnClickListener(item); // work 
    return vi; 
} 

回答

0

你有你的適配器與任何活動?嘗試在你的活動中實現監聽器,而不是在你的適配器中。

+0

他與我的主要巨大的活動相關聯,我不會在這裏趕上長時間的點擊事件 – Nativ

+0

好吧!代碼中你的vi是什麼?它是convertView的一些組件嗎? – Safime

+0

是的,我會編輯我的答案,以解釋什麼是vi – Nativ

0

最好添加listView.setOnItemLongClickListener(this);在你的mainActivity