【问题标题】:ListView with BaseAdapter are not responding to OnLongClickListener带有 BaseAdapter 的 ListView 没有响应 OnLongClickListener
【发布时间】:2013-01-20 06:40:54
【问题描述】:

我知道有些话题会讨论这种行为,但我还没有看到可以使用的解决方案。

问题如下,我有一个使用实现 OnLongClickListener 的 BaseAdapter 的列表视图。在 GetView 方法中,我将每个视图的 onLongClickListener 设置为此 - 但长按根本没有被捕获。此外,我将每个项目 onClickListener 设置为实现 OnClickListener 的不同项目,它确实捕获了单击事件,当我尝试对 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 的类的实例

编辑 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:

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

    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;
}

【问题讨论】:

    标签: android listview android-listview baseadapter


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的适配器是否与任何活动相关联?尝试在您的活动中实现侦听器,而不是在适配器中。

      【讨论】:

      • 他与我主要的大型活动有关,我不会在这里捕捉长点击事件
      • 好的!你的代码中的vi是什么?它是 convertView 的某个组件吗?
      • 所以,如果我理解的话,你有一个项目列表,每个项目都对应于你展示的 FrameLayout,对吧?但是在您发布的代码中,我看到 convertView 与您分配侦听器的 vi 之间没有任何关系。我不知道您是否已经在 getView 代码的其他部分执行此操作,但它应该是“convertView.setOnLongClickListener(this)”。如果您已经这样做了,我很抱歉,但我看不出其他原因。
      • 所以我不知道出了什么问题。我做了一些测试,它们工作正常。你能发布完整的 getView 代码吗?
      猜你喜欢
      • 2015-11-20
      • 2016-01-08
      • 1970-01-01
      • 2011-09-28
      • 2020-11-19
      • 1970-01-01
      • 2015-06-06
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多