如何使用onLongPress适配器删除列表项

时间:2011-06-17 13:26:24

标签: android listener listitem long-press

是否可以使用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; 

    } 

3 个答案:

答案 0 :(得分:1)

在这里使用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;

            }
            ;
        };
    };

请参阅How to update UI of listview

中的回复

答案 1 :(得分:0)

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

编辑: 在这个链接上可以找到一个平庸的例子:

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

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

答案 2 :(得分:0)

试试这个:

listView.setOnItemLongClickListener(new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
            listView.removeViewAt(position);
            return false;
        }
    });