Java Android:Listview长挂上下文菜单问题
在长时间按住listview条目并显示各种选项后,我试图打开上下文菜单。 但是,我不能,因为holding没有做/调用任何事情 这是我用来调用上下文菜单的代码:Java Android:Listview长挂上下文菜单问题,java,android,listview,contextmenu,Java,Android,Listview,Contextmenu,在长时间按住listview条目并显示各种选项后,我试图打开上下文菜单。 但是,我不能,因为holding没有做/调用任何事情 这是我用来调用上下文菜单的代码: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuItem d
@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;
};
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
}
}
我也试过,但也没有用:
@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;
};
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
}
}
main活动代码(仅相关部分):
@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;
};
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
}
}
公共类MainActivity扩展活动{
private List myElements=new ArrayList();
列表视图列表;
阵列适配器;
/*
用户输入所需的listview项,此处未显示代码。它工作正常,但-
所有需要的元素都正确显示。
*/
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
适配器=新的MyListAdapter();
列表=(ListView)findViewById(R.id.listView1);
list.setAdapter(适配器);
registerForContextMenu(列表);
}
@凌驾
public void onCreateContextMenu(ContextMenu,视图v,
上下文菜单信息(menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
MenuItem delete=菜单。添加(“删除”);
MenuItem edit=菜单。添加(“编辑”);
delete.setOnMenuItemClickListener(新的OnMenuItemClickListener(){
公共布尔onMenuItemClick(菜单项){
返回true;
}
});
edit.setOnMenuItemClickListener(新的OnMenuItemClickListener(){
公共布尔onMenuItemClick(菜单项){
返回true;
}
});
}
私有类MyListAdapter扩展了ArrayAdapter{
//这里有自定义适配器代码
}
}
非常感谢您的帮助。谢谢大家! 看看这个。您必须在“菜单”文件夹中创建自己的菜单,然后使用onCreateContextMenu()方法对其进行充气。好的,我已经找到了答案。在我的自定义listAdapter中,我在listView上添加了一个setOnItemLongClickListener。此setOnItemLongClickListener显示一个警报,其中包含我需要的选项。因此:
list.setOnItemLongClickListener(new OnItemLongClickListener() { //list is my listView
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
final int pos, long id) {
//Whatever you wanna do
}
});
list.setOnItemLongClickListener(新的OnItemLongClickListener(){//list是我的listView
@凌驾
长单击(AdapterView arg0、视图arg1、,
最终整数位置,长id){
//你想干什么都行
}
});
不应该将上下文菜单添加到适配器上的项目而不是listview?我不这样认为,因为registerForContextMenu需要一个视图参数。我可能错了。行也是视图:)我认为这里的问题是listview中的滚动事件正在拦截longpress事件。你知道如何应对吗?(即,使滚动条不会截获长按)。如果需要的话,我可以显示“MyListAdapter”代码。好的,我能够找到它。在我的自定义listAdapter中,我在listView上添加了一个setOnItemLongClickListener。此setOnItemLongClickListener显示一个警报,其中包含我需要的选项。谢谢你提供的帮助!