2011-06-01 53 views

回答

26

很难知道你需要实现什么。但我的猜测是,你想对收到长按的项目执行一些操作。为此,您有两种选择:

listView.setOnItemLongClickListener (new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { 
    //do your stuff here 
    } 
}); 
+0

可以请你澄清如何将OnItemLongClickListener分配给我的ListView?先谢谢你。 – 2011-06-01 20:14:42

+0

@LA_参见上文。 – Aleadam 2011-06-01 20:54:44

+0

谢谢,它完美的作品。我怎样才能获得特定的数据库价值,与长期点击的项目相关联?应该像'this.getListAdapter()。getItem(position)'? – 2011-06-02 11:31:12

0

为您的视图添加自定义的View.OnLongClickListener。它可以被许多实例共享,然后您可以使用参数

onLongClick(View v) 

知道哪个视图已被点击并作出相应的反应。

问候, 斯特凡

+0

请问这个烂摊子了ListView的正常滚动/一扔功能创建视图时添加View.OnLongClickListener? – 2011-06-01 18:26:53

+0

奇怪,但它也不起作用。我这样做:'公共类BridgesCloseActivity扩展ListActivity {... OnLongClickListener longClickListener; ... longClickListener = new OnLongClickListener(){ \t public boolean onLongClick(View v){ \t \t Log.i(“”,Integer.toString(v.getId())); \t \t return true; \t} };' – 2011-06-01 19:13:47

+0

@LA_您可能需要让onDown返回true。 – 2011-06-01 20:21:54

14

通常情况下,你会与一个上下文菜单,您可以通过与Activity.registerForContextMenu(View view)注册ListView控件做一个列表视图长按关联给其他更加一致的用户界面体验android应用程序。

,然后重写onContextItemSelected方法在你的应用程序是这样的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    listView = (ListView) findViewById(R.id.your_list_view); 
    registerForContextMenu(listView); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle(getString(R.string.menu_context_title)); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.your_context_menu, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    switch (item.getItemId()) { 
    case R.id.some_item: 
     // do something useful 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 

在列表中的位置为info.id

还举行了如果你只是想要捕获的长按事件,然后我想想Snicolas的建议会起什么作用。

+0

它不起作用。看起来像是因为我没有上下文菜单 - onContextItemSelected从不被调用。 – 2011-06-01 19:04:50

+0

我更新了代码示例。你调用了'registerForContextMenu(listView)'吗?正如其他人所说的,你是在试图在项目被长时间点击时尝试获得某些东西,或者你想要为列表视图上的项目获取上下文菜单吗? – 2011-06-01 19:55:03

+0

我试图开始另一项活动,当该项目被长时间点击。所以,不需要显示上下文菜单。 'RegisterForContextMenu(listView)'在那里。 – 2011-06-01 19:59:07

0
//Deleted individual cart items 
    //on list view cell long press 
    cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() { 
      @SuppressWarnings("rawtypes") 
     public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { 
       final CharSequence[] items = { "Delete" }; 

       AlertDialog.Builder builder = new AlertDialog.Builder(context); 

       builder.setTitle("Action:"); 
       builder.setItems(items, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int item) { 
         cart = cartList.get(position); 
         db.removeProductFromCart(context, cart); 

         new AlertDialog.Builder(context) 
         .setTitle(getString(R.string.success)) 
         .setMessage(getString(R.string.item_removed)) 
         .setPositiveButton("Done", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class); 
           startActivity(intent); 
          } 
         }) 
         .show(); 

        } 

       }); 

       AlertDialog alert = builder.create(); 

       alert.show(); 
      //do your stuff here 
       return false; 
      } 
     });