Android选项菜单按钮仅在第二次点击后有效

时间:2012-10-16 08:32:51

标签: android button onclicklistener android-optionsmenu

我的应用中有以下代码。有一个登录按钮,可以在我的视图上正常工作。我在我的视图上覆盖了optionsmenu,并将登录代码放在一个附加到optionsmenu的监听器中。当我按下optionsmenu登录按钮时,第一次点击没有任何反应,但在后续点击时一切正常。这是为什么?

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.layout.menuentryoptionsmenu, menu);
        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {


        case R.id.login:
                        item.setOnMenuItemClickListener(new OnMenuItemClickListener(){

                            @Override
                            public boolean onMenuItemClick(MenuItem item) {
                                // TODO Auto-generated method stub
                                Log.e(TAG, "login clicked from opts menu");
                                 compId = "100";
                                    String theUsername = userName.getText().toString();
                                    thePassword = passwordPin.getText().toString();
                                    String loginType = "1";



                                    String[] params = new String[]{compId, theUsername, thePassword, loginType};

                                    //validate user Asynchonously on background thread
                                    AsyncValidateCarer avc = new AsyncValidateCarer();
                                    avc.execute(params);
                                return true;
                            }});


            return true;


        case R.id.changeuser:
            if(isAllowChangeUser.equalsIgnoreCase("false")){
            item.setVisible(false);
            }
            return true;



        default:

            return super.onOptionsItemSelected(item);
        }
    }

2 个答案:

答案 0 :(得分:3)

删除点击监听器。 只需将整个登录代码放在case R.id.login:

之后

那是因为onOptionsItemSelected已经是点击,你不必再创建和设置它。

答案 1 :(得分:1)

似乎第一次单击选项菜单项时,您只是添加了OnMenuItemClickListener侦听器。第二次单击时,您将触发该侦听器。

尝试删除onMenuItemClickListener代码,并将onMenuItemClick函数中的代码直接放入switch语句中。