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)

如何正确从列表中获取位置?PS对不起我的英语不好:(

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;

现在它可以工作了......但我认为它是如此丑陋......

4

3 回答 3

1

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

于 2013-03-30T14:41:41.900 回答
1

为什么不使用 aonListItemLongClick 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);
}
于 2013-03-30T14:42:04.513 回答
1
public boolean onContextItemSelected(MenuItem item) { ... }

由于您正在使用ContextMenu这与ItemClickListener

您可以使用MenuInfo来获取位置ListView

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

它具有返回显示上下文菜单的适配器中的位置的int属性。info.position

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

于 2013-03-30T14:43:29.087 回答