我有一个CustomListAdapter。我已经重载了我的OnItemClickListener并为我所显示的上下文菜单的位置添加了一个registerForContextMenu行。
当我选择应显示MenuItem的项目时,会显示菜单。当我按下手机上的后退按钮时,菜单消失。但是现在我的列表视图中的相同项目不再接收OnItemClickListener会发生什么。我有意义吗?我的意思是在菜单消失后,同一项目不会收到点击监听器。上方和下方的项目根据需要接收活动。我好像菜单已经消失但仍然在捕捉点击事件?
答案 0 :(得分:1)
这很糟糕。您必须在registerForContextMenu
方法中致电onCreate
。
所以试试这样:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts);
registerForContextMenu(<yourListView>);
...
}
对于创建ContextMenu
,您必须覆盖onCreateContextMenu
方法
@Override
public void onCreateContextMenu(ContextMenu cMenu, View parent, ContextMenu.ContextMenuInfo info) {
this.contextMenu = cMenu;
new MenuInflater(Contacts.this).inflate(R.menu.conmenu, this.contextMenu);
}
并且对于选择项重写onContextItemSelected
方法:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.c_odobrat:
deleteContactDialog(info.id);
return true;
}
return false;
}
它应该有效。
答案 1 :(得分:0)
quickLinkListView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id)
{
Intent intent = new Intent();
intent.setClassName(Home.this, "com.myapp.toc" + Constants.ACT_NAMES[position]);
if (position < 4 && position > 1)
{
switch (position)
{
case 3:
registerForContextMenu(v);
ViewHolder.v=v;
openContextMenu(v);
break;
}
}
}
});
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_home, menu);
menu.setHeaderTitle("Select Video Type");
}