1

有没有一种简单的方法可以使用删除列表中的项目onLongPress

我想使用OnGestureListener-onLongPress来监听longpress和删除列表中的项目并相应地由适配器更新。

我的问题是,如果我使用自定义适配器,那么冲突onlistItemclickonItemLongClick长按不会触发任何事情!

    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; 

    } 
4

3 回答 3

1

这里使用 Handler 的概念。

Step1声明一个常数

private static final byte UPDATE_LIST = 100;

Step2调用处理程序 onclick of button

 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;

            }
            ;
        };
    };

请参阅我在如何更新列表视图的 UI 中的回复

于 2011-06-17T13:49:58.187 回答
0

您需要使用 View.setOnClickListener() 将 OnClickListener 注册到您的视图中。

编辑:可以在此链接中找到一个平庸的示例:

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

向下翻页到它说活动的地方并在那里查看。他们实现自己的类来做所有事情,但使用来自超类(而不是自定义类的一部分)的方法我不能保证这肯定会解决你的问题,但应该是朝着正确方向迈出的一步.

于 2011-06-17T13:48:07.357 回答
0

尝试这个:

listView.setOnItemLongClickListener(new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
            listView.removeViewAt(position);
            return false;
        }
    });
于 2011-06-17T13:53:38.037 回答