2012-10-16 72 views
-1

我的應用程序中有以下代碼。有一個登錄按鈕,在我看來工作得很好。我已經覆蓋了我的視圖中的選項菜單,並將登錄代碼放入附加到選項菜單的偵聽器中。當我按下選項菜單登錄按鈕沒有發生在第一次點擊,但一切工作正常後續點擊。爲什麼是這樣?Android選項菜單按鈕僅在第二次點擊後才起作用

@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); 
     } 
    } 

回答

3

刪除點擊偵聽器。 只需將整個登錄代碼放在case R.id.login:之後即可。

這是因爲onOptionsItemSelected已經是點擊,您不必再次創建和設置它。

+0

非常感謝,它現在工作正常 – turtleboy

1

看起來,您第一次點擊選項菜單項時,您只是添加了OnMenuItemClickListener偵聽器。第二次點擊時,您正在觸發該聽衆。

嘗試刪除onMenuItemClickListener代碼,並將onMenuItemClick函數中的代碼直接放入switch語句中。

相關問題