【发布时间】:2014-09-12 16:54:17
【问题描述】:
在长时间按住列表视图条目并显示各种选项后,我正在尝试打开上下文菜单。 但是,只要持有没有做/调用任何事情,我就无法做到。
这是我用来调用上下文菜单的代码:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuItem delete = menu.add("delete");
MenuItem edit = menu.add("edit");
delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
}
我也尝试过,但也无济于事:
@Override
public void onCreateContextMenu(ContextMenu menu,
View v, ContextMenuInfo menuInfo) {
menu.add(0, 1, 0, "Edit");
menu.add(0, 2, 1, "Rename");
menu.add(0, 3, 2, "Delete");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
if(item.getTitle().equals("Edit")) {
//Edit code
} else if(item.getTitle().equals("Rename")) {
//Rename code
} else if(item.getTitle().equals("Delete")) {
//Delete code
}
return true;
};
MainActivity 代码(仅相关部分):
public class MainActivity extends Activity {
private List<CountElement> myElements = new ArrayList<CountElement>();
ListView list;
ArrayAdapter<CountElement> adapter;
/*
Users enters needed listview items, code not shown here. It works fine however -
all needed elements are displayed correctly.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new MyListAdapter();
list = (ListView) findViewById(R.id.listView1);
list.setAdapter(adapter);
registerForContextMenu(list);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuItem delete = menu.add("delete");
MenuItem edit = menu.add("edit");
delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
}
private class MyListAdapter extends ArrayAdapter<CountElement> {
//Custom adapter code here
}
}
非常感谢任何帮助。谢谢!
【问题讨论】:
-
不应该将上下文菜单添加到适配器上的项目而不是列表视图?
-
我不这么认为,因为 registerForContextMenu 需要一个 View 参数。我可能错了。
-
而且行也是视图 :) 我认为这里的问题是来自列表视图的滚动事件正在拦截 longpress 事件。
-
知道如何解决这个问题吗? (即这样滚动不会拦截长按)。如果需要,我可以显示“MyListAdapter”代码。
-
好吧,我想通了。在我的自定义 listAdapter 中,我在 listView 上添加了一个 setOnItemLongClickListener。这个 setOnItemLongClickListener 显示了一个带有我需要的选项的警报。感谢您提供的帮助!
标签: java android listview contextmenu