2016-09-27 4 views
3

Android 앱용 작업 표시 줄을 설계했습니다. 이 작업 표시 줄에는 내 앱 동작을 구성하는 데 사용되는 대화 상자 활동을 시작하는 버튼이 있습니다. 이 버튼을 충분히 빠르게 두 번 클릭하면 실제로 나타나기 전에 Dialog Activity가 두 번 실행되도록 주문할 수 있습니다. 그러면 중복되고 시각적으로 중복되어 나타나기 때문에이 작업을 원하지 않습니다. 일종의 잠금 메커니즘을 만들려고했지만 주 활동 (onOptionsItemSelected) 메서드를 호출하는 코드가 모두 실행 된 후에야 내 대화 상자 작업이 시작되기 때문에 작동하지 않습니다. 이 양식을 피할 수있는 방법이 있습니까?두 번 클릭하지 못하도록 액션 바에서 항목 피하십시오

내 코드는 다음과 같습니다

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

//ensure only one element from the option menu is launched at once (if you double click fast you could launch two) 

Log.e("test", "onOptionsItemSelected "); 
if(optionItemAlreadySelected == false) 
{ 
    optionItemAlreadySelected = true; 

    int id = item.getItemId(); 

    if (id == R.id.action_sound_mode) { 
     //item.setVisible(false); 
     Intent intent = new Intent(this, SoundConfigurationActivity.class); 

     startActivity(intent); 

     optionItemAlreadySelected = false; //this code is executed before the activity is started!!! 
     return true; 
    } 

} 

return super.onOptionsItemSelected(item); 
} 

다이얼로그 활동이 이미 폐쇄 때 알고 그때까지 한 번 다시 열 수있는 기회를 잠글 수있는 방법이 있나요.

+0

[안드로이드는 버튼을 두 번 클릭 방지]의 사용 가능한 복제 (http://stackoverflow.com/questions/5608720/android-prevention-double-click-on-a-button) – earthw0rmjim

답변

1

부울 변수를 사용하여 Dialog의 상태를 추적 할 수 있습니다. 버튼을 클릭하면 다른 쇼 대화 상자 요청을 차단하기 위해 mDialogShown = true을 설정합니다.
이제 사용자가 뒤로 버튼을 누르고 대화 상자가 닫히면 onActivityResult가 호출됩니다.
이 시점에서 대화 상자가 닫혔습니다.
내가 당신의 코드가 활동 안에 가정 :

class MainActivity extend Activity { 

    static final int SHOW_DIALOG_REQUEST = 1; // The request code 
    static boolean mDialogShown = false; // True if dialog is currently shown 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_sound_mode) { 
      showDialog(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    private void showDialog() { 
     if (!mDialogShown) { 
      mDialogShown = true; 
      Intent intent = new Intent(this, SoundConfigurationActivity.class); 
      startActivityForResult(intent, SHOW_DIALOG_REQUEST); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // Check which request we're responding to 
     if (requestCode == SHOW_DIALOG_REQUEST) { 
      mDialogShown = false; 
     } 
    } 
} 

문서
https://developer.android.com/training/basics/intents/result.html https://developer.android.com/guide/topics/ui/dialogs.html#ActivityAsDialog

+0

이것은 우아한 해결책입니다. 감사!!! – VMMF