2011-06-17 59 views
0

使用onLongPress可以简单地删除列表中的项目吗?如何使用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; 

    } 
+0

究竟什么是你的问题? – 2011-06-17 13:35:50

+0

我喜欢这个,你称它为标题中的一个疑难问题,并没有在实际的帖子中提出问题。 编辑:我发现了这个问题。问号有帮助 问题:是否有一种简单的方法可以使用onLongPress删除列表中的项目? – Matt 2011-06-17 13:38:55

+0

嗨Mojo,我使用的适配器包含以下内容: - – user803271 2011-06-17 13:40:16

回答

0

你需要使用View.setOnClickListener()您的浏览注册OnClickListener。

编辑: 这方面的一个例子平庸可以在此链接中找到:

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

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

1

这里使用Handler的概念。

第一步声明常数

private static final byte UPDATE_LIST = 100; 

第二步呼叫处理程序的onclick按钮

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

第三步:定义处理器

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

0

响应试试这个:

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