-1

アプリに次のコードがあります。私のビューでは正常に機能するログインボタンがあります。ビューの 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);
        }
    }
4

2 に答える 2

3

クリック リスナーを削除します。の後にログインコード全体を入れるだけcase R.id.login:です。

これは、onOptionsItemSelected が既にクリックされているため、作成して再度設定する必要はありません。

于 2012-10-16T08:36:22.717 に答える
1

オプション メニュー項目を初めてクリックしたときは、OnMenuItemClickListener リスナーを追加しているだけのように見えます。2 回目にクリックすると、そのリスナーがトリガーされます。

onMenuItemClickListener コードを削除して、onMenuItemClick 関数のコードを switch ステートメントに直接挿入してみてください。

于 2012-10-16T08:37:57.437 に答える