2013-02-05 52 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