我有一个ListView。我在单击某个项目时实现了OnItemClickListener来打开ContextMenu。
lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
showMenu(view);
}
});
创建菜单的代码。
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.layout.friend_list_menu, menu);
}
public void showMenu(View v) {
registerForContextMenu(v);
openContextMenu(v);
}
我的问题是,当我点击ListView的一个项目时,它会打开菜单。但是,如果我回到ListView,我不能再次点击该项目。其他项目相同,关闭菜单后无法单击。任何人都可以帮我这个吗?
答案 0 :(得分:2)
你错误地设置了它。您在设置适配器时注册上下文菜单,而不是单击按钮。
它应该是这样的:
setListAdapter(lists);
registerForContextMenu(getListView());
然后你有了onCreateContextMenu
和onContextItemSelected
方法(我以编程方式创建了我的方法,但是你的膨胀的方法也可以正常工作):
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("List Operations");
menu.add(0, v.getId(), 0, "Edit List");
menu.add(0, v.getId(), 0, "Delete List");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
if (item.getTitle() == "Edit List") {
// Do your edit stuff here
} else if (item.getTitle() == "Delete List") {
// Do your delete stuff here
}
return super.onContextItemSelected(item);
}
您不需要使用onItemClick
,除非您想在短按项目时执行某些操作(长按上下文菜单)。
答案 1 :(得分:0)
以下代码将有效。
代码:
ListView listview=(ListView)findViewByid(R.id.listview);
/**** here write appending data to listview*******/
ArrayAdapter<String> adp=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,/**your list items**/);
listview.setadapter(adp);
registerForContextMenu(listview);
//listview item click listener
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View v, int p, long arg3) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "selected" + p, 30).show();
}});
/****do your context menu code here*******/