2013-03-30 121 views
3

我对Android比较陌生。下面是部分代码:获取所选项目的位置...?

protected void onListItemClick(ListView l, View v, int position, long id) { 
super.onListItemClick(l, v, position, id); 
Note selectedName = adapter.getItem(position); 
adapter.removeItem(selectedName); 

正如你看到的,位置是指所选项目的位置。那很好。但我宁愿长点击:

public boolean onContextItemSelected(MenuItem item) { 
switch(item.getItemId()) { 
case R.id.ctxmemu_delete: 
** I need to use POSITION mentioned above! ** 

但是这种方法的getSelectedItemPosition返回位置-9995845834585(或不服这样的) 或者提示错误(不能将光标移动到的位置 - 我用SQL在我的应用)

如何正确地从列表中获取位置? P.S.对不起,我的英语不好:(

UPD: 我已经添加到了我的SQL适配器:

public int getPosition(){ 
return cursor.getPosition(); } 

和修改:

case R.id.ctxmemu_delete: 
int position = adapter.getPosition(); 
Note seln = adapter.getItem(position); 
adapter.removeItem(seln); 
return true; 

现在它的作品...但我认为它是如此丑陋...

+1

为什么你不使用onListItemLongClick监听器而不是上下文菜单? – Swayam

+0

Kondra检查我的答案:)它应该可以解决你的问题。 – Sajmon

+0

我现在想了解它.. – Groosha

回答

1

你只需要使用onListItemLongClick()而不是onListItemClick()。

+0

我需要居住在超类吗? (或者像那样) – Groosha

+0

没有必要。 –

1

为什么不使用onListItemLongClick listener而不是去上下文菜单?

protected void onListItemLongClick(ListView l, View v, int position, long id) { 
super.onListItemLongClick(l, v, position, id); 
Note selectedName = adapter.getItem(position); 
adapter.removeItem(selectedName); 
} 
+0

我想让我的上下文菜单(将来) – Groosha

1
public boolean onContextItemSelected(MenuItem item) { ... } 

由于您使用ContextMenu这是ItemClickListener

有一点不同您可以ListView

AdapterView.AdapterContextMenuInfo info = 
         (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 

凡具有int财产使用MenuInfo用于获取位置info.position返回位置在显示上下文菜单的适配器中。

注意:你也可以看看OnItemLongClickListener与类似的作品。