Android微调器短按项目+上下文菜单

时间:2012-11-18 19:35:37

标签: android contextmenu spinner

如果用户点击微调器的项目,我不会显示上下文菜单:

    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上显示它?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在onItemSelected回调中添加一个布尔标志。

if (!isfirst){
    openContextMenu(spinner);                   
} else {
    isfirst = false;
}

您的微调器也会遇到第二个问题,因为默认选择第一个项目,单击它不会“触发”回调方法。解决这个问题的方法是在列表的头部插入一个空白项目,并在回调中检查这一项。

 if (position != 0){
    openContextMenu(spinner);                   
} else {
    // Do nothing
}

编辑:我还注意到,每次单击某个项目时,都会为上下文菜单注册每个视图。您只需要在定义后调整微调器一次,然后在调用openContextMenu(微调器)时将微调器作为视图传递