Как удалить элементы списка с помощью адаптера onLongPress - PullRequest
0 голосов
/ 17 июня 2011

Есть ли простой способ удалить элементы в списке, используя onLongPress?

Я хотел бы использовать OnGestureListener - onLongPress для прослушивания longpress и удаления элементов в спискеи обновите адаптер соответствующим образом.

Моя проблема в том, что если я использую пользовательский адаптер, то конфликты onlistItemclick и onItemLongClick и длительный щелчок ничего не вызывают!

    public void onLongPress(MotionEvent e) {
    // TODO Auto-generated method stub
    Toast.makeText(listmodified.this, "A long click detected", Toast.LENGTH_SHORT).show();
    if (e.getAction()==MotionEvent.ACTION_DOWN) 
    { 

    OnItemLongClickListener itemDelListener = new OnItemLongClickListener(){

            //@Override
            public boolean onItemLongClick(AdapterView<?> parent, View arg1,
                    int position, long arg3) {
                // TODO Auto-generated method stub
                itemSelected=parent.getItemAtPosition(position).toString();

                adapter.remove(itemSelected);
                myList.remove(position);
                adapter.notifyDataSetChanged();
                Toast.makeText(listmodified.this, "IN LONGCLICK", Toast.LENGTH_SHORT).show();
                return false;
            }};


        longClickedItem = -1; 

    } 

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Используйте здесь понятие Handler.

Step1 Объявить константу

private static final byte UPDATE_LIST = 100;

Step2 Вызов обработчика нажатием кнопки

 OnItemLongClickListener itemDelListener = new OnItemLongClickListener(){

        //@Override
        public boolean onItemLongClick(AdapterView<?> parent, View arg1,
                int position, long arg3) {
            // TODO Auto-generated method stub
            itemSelected=parent.getItemAtPosition(position).toString();

            adapter.remove(itemSelected);


                    Message msg = new Message();
                msg.what = UPDATE_LIST;
                msg.arg1 = position
                updateListHandler.sendMessage(msg);
            Toast.makeText(listmodified.this, "IN LONGCLICK", Toast.LENGTH_SHORT).show();
            return false;
        }};

Step3 Определить обработчик

private Handler updateListHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_LIST:
            int position = msg.arg1;
                list.remove(position);
                adapter.notifyDataSetChanged();
                break;

            }
            ;
        };
    };

См. Мой ответ в Как обновить интерфейс просмотра списка

0 голосов
/ 17 июня 2011

Попробуйте:

listView.setOnItemLongClickListener(new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
            listView.removeViewAt(position);
            return false;
        }
    });
0 голосов
/ 17 июня 2011

Вам необходимо зарегистрировать OnClickListener с вашими представлениями, используя View.setOnClickListener ().

РЕДАКТИРОВАТЬ: Посредственный пример этого можно найти по этой ссылке:

http://www.androidsnippets.com/clickable-listview-items

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

...