2012-10-16 2 views
-1

내 앱에 다음 코드가 있습니다. 내보기에는 정상적으로 작동하는 로그인 버튼이 있습니다. 나는 내 view의 옵션 메뉴를 오버라이드했고 optionsmenu에 첨부 된 리스너 안에 로그인 코드를 두었다. 옵션 메뉴 로그인 버튼을 누르면 첫 번째 클릭에서 아무런 변화가 없지만 이후의 클릭에는 모두 정상적으로 작동합니다. 왜 이런거야?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 문에 직접 넣어보세요.

관련 문제