ListView с BaseAdapter не отвечает на OnLongClickListener

Я знаю, что есть некоторые темы, в которых говорится об этом поведении, но я не вижу там решения, которое я мог бы использовать.

проблема в следующем, у меня есть представление списка, которое использует BaseAdapter, который реализует OnLongClickListener. В методе 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>

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

person Nativ    schedule 05.02.2013    source источник


Ответы (2)


У вас есть адаптер, связанный с какой-либо деятельностью? Попробуйте реализовать прослушиватель в своей деятельности, а не в адаптере.

person Safime    schedule 05.02.2013
comment
он связан с моей основной огромной деятельностью, и я не буду здесь, чтобы ловить события с длинным кликом - person Nativ; 05.02.2013
comment
В порядке! Какой у тебя vi в коде? Это какой-то компонент convertView? - person Safime; 05.02.2013
comment
Итак, если я правильно понял, у вас есть список элементов, и каждый из них соответствует представленному вами FrameLayout, верно? Но в опубликованном вами коде я не вижу связи между convertView и vi, который вы назначаете слушателю. Я не знаю, делаете ли вы это уже в другой части кода getView, но это должно быть «convertView.setOnLongClickListener(this)». Извините, если вы уже делаете это, но я не вижу другой причины. - person Safime; 05.02.2013
comment
Так что я понятия не имею, что случилось. Я сделал несколько тестов, и они работали правильно. Не могли бы вы опубликовать полный код getView? - person Safime; 05.02.2013

лучше добавить listView.setOnItemLongClickListener(this); в вашей основной деятельности

person Meghna    schedule 17.04.2014