如果用户点击微调器的项目,我不会显示上下文菜单:
uSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
{
Toast.makeText(getBaseContext(), "Position = " + position, Toast.LENGTH_SHORT).show();
pos = position;
registerForContextMenu(view);
openContextMenu(view);
unregisterForContextMenu(view);
}
});
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo info)
{
if(pos != -1)
{
menu.setHeaderTitle("Admin menu");
menu.add("Kick");
}
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
if(item.getTitle()=="Kick")
{
Toast.makeText(getBaseContext(), "Kick: " + usrStack.get(pos), Toast.LENGTH_SHORT).show();
}
return super.onContextItemSelected(item);
}
一切都很好,但如果我的应用程序启动,我会看到第一个元素的上下文菜单。 (你可能还记得,有点匿名,第一个元素显示在微调器上。所以我认为它选择第一个元素并调用我的上下文菜单) 如何仅在onlick上显示它?
答案 0 :(得分:1)
最简单的方法是在onItemSelected回调中添加一个布尔标志。
if (!isfirst){
openContextMenu(spinner);
} else {
isfirst = false;
}
您的微调器也会遇到第二个问题,因为默认选择第一个项目,单击它不会“触发”回调方法。解决这个问题的方法是在列表的头部插入一个空白项目,并在回调中检查这一项。
if (position != 0){
openContextMenu(spinner);
} else {
// Do nothing
}
编辑:我还注意到,每次单击某个项目时,都会为上下文菜单注册每个视图。您只需要在定义后调整微调器一次,然后在调用openContextMenu(微调器)时将微调器作为视图传递