我有一个包含多个项目的LisView。为此,我连接了一个OnItemClickListener(作为内部类),如下所示:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ShoppingListApp02Activity.this, "List item selected:" +
items.get(position).getId(), Toast.LENGTH_LONG).show();
}
});
很明显,选择entry会显示该条目的对象元素,在本例中是所选Item对象的ID(不是列表ID,而是创建ArrayList项目时设置的对象ID)。这很好地工作,并且使我能够对所选项目执行任何我想要的操作。
现在,我还希望有一个"长点击"监听器her,它为所选ListView项打开一个上下文菜单。我该怎么做?我已经能够将onCreateContextMenu侦听器附加到ListView,但我不知道如何像使用onItemClickListener那样获得ArrayList的元素?
这是我得到的:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, v.getId(), 0, "Something");
menu.add(0, v.getId(), 0, "Something else");
}
由于OnCreateConextMenu采用的参数与OnItemClickListener不同,我如何访问ArrayList的元素,如OnItemClick监听器中的元素?
如果您决定仍要使用上下文菜单范例:
在处理列表时考虑这一点:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// Get the list
ListView list = (ListView)v;
// Get the list item position
AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
int position = info.position
// Now you can do whatever.. (Example, load different menus for different items)
list.getItem(position);
...
}
ListView
提供了更易于实现的onItemLongClick事件,而不是扰乱上下文菜单(在宽上下文中使用,如在PC中右键单击)。例如:
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
return false;
}
});
这将帮助您在一行中完成长时间按下的操作。
在行视图上长按事件的事件处理程序中打开视图的上下文菜单。
convertView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
((Activity)mContext).openContextMenu(v);
return true;
}
});
这样,单击视图和长按上下文菜单都可以在列表视图行项目上工作。
首先将上下文菜单注册到列表视图中以打开上下文菜单:
registerForContextMenu(YOUR LIST-VIEW OBJECT);
然后可以使用onCreateContextMenu()方法:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, v.getId(), 0, "Something");
menu.add(0, v.getId(), 0, "Something else");
}
实际上,您不需要在listview中使用longClickListener来使用ContextMenu。
希望它能帮助你。
我将让您浏览下面编写的示例,并了解如何使用onContextItemSelected()实现它
public void onCreateContextMenu(ContextMenu menu,
View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle(title);
menu.add(0, CMD_EDIT, 0, R.string.context_menu_edit);
menu.add(0, CMD_DELETE, 0, R.string.context_menu_delete);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case CMD_EDIT:
any_function();//add your functionality here i.e. what you want to do
return true;
case CMD_DELETE:
**confirmDelete**();
return true;
default:
return super.onContextItemSelected(item);
}
}
希望这能帮助。。。
在recycleView 中的View项目中尝试此操作
viewForContextMenu.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.add("Context Menu Item1").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
//What should happent on selecting context menu item 1
return true;
}
});
}
});
您可以将其与ViewHolder项的设置数据一起使用