2011-04-14 6 views
16

나는 내가 방법을 여러 번 호출 할 수있는 상황이 될 수 있습니다 내 응용 프로그램에서 대화대화 상자가 열려 있는지 확인하는 방법은 무엇입니까?

public static void showDialog(Context context) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 
    builder.setPositiveButton("ok", new OnClickListener() { 
      public void onClick(DialogInterface dialog, int arg1) { 
       dialog.dismiss(); 
      }}); 
    builder.setCancelable(false); 
    builder.create().show(); 
} 

를 생성하는 정적 메소드를 가지고,하지만 난 2 개 이상의 대화 상자를 열고 싶지 않아요. 대화 상자가 열려 있는지 확인하는 방법은 무엇입니까? 감사 ...

답변

32

이 기능을 지원하려는 모든 활동에이 코드를 삽입해야합니다.

public AlertDialog myAlertDialog; 

public void showDialog(Context context) { 
     if(myAlertDialog != null && myAlertDialog.isShowing()) return; 

     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle("Title"); 
     builder.setMessage("Message"); 
     builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int arg1) { 
        dialog.dismiss(); 
       }}); 
     builder.setCancelable(false); 
     myAlertDialog = builder.create(); 
     myAlertDialog.show(); 
} 
+0

이 접근법은 다른 활동에서 작동하지 않습니다.'this'는' 활동 '을 의미한다. 두 번째 액티비티가이 메소드를 호출 할 때, 컨텍스트는 오래된 것입니다 (첫 번째'Activity'). – ernazm

+1

@ user639183 당신 말이 맞아요. 이것을 액티비티 클래스에 넣고 정적이 아닌 것이 가장 좋습니다. – vendor

+0

나를 위해 작동 할 수 있습니다 ... 내 애플 리케이션에서 하나의 활동은 몇 번만이 방법을 호출 할 수 있습니다. 하지만 나는 정회원들과 일하는 걸 좋아하지 않아. 안전한가요? 이 회원을 죽여야합니까? – Jim

1

AlertDialog을 반환하는 방법을 다시 작성하고 멤버에게 할당 한 다음이 메서드가 null이거나 !isShowing() 인 경우이 메서드를 호출하기 전에 확인하십시오.
대신 onCreateDialog을 사용할 수도 있습니다. 대화 상자를 관리해야하는 액티비티의 기본 클래스에서이 메서드를 구현 한 다음 원하는 곳이면 showDialog(int id)을 호출하십시오.

+0

이 방법은 같은 대화 상자가 여러 번 실행되지 않습니다? – Jim

+0

'null'과'isShowing'을 확인하지 않으면 시도 할 것입니다 – ernazm

+0

고마워요 ... 그걸 시도해야합니다 .. – Jim

0
  AlertDialog alertDialog; 
    alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle(title); 
    alertDialog.setMessage(msg);   
    alertDialog.setButton(-3, "Text Parsed", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      dialog.dismiss(); 
     } 
    }); 

    alertDialog.show(); 
+0

동적으로 제목을 전달할 수 있습니다. 위에있는 함수에서! – mkh

+0

당신은 대답을 제공해야합니다 ... 코드 조각은 대답이 아닙니다. –

관련 문제