2011-11-29 4 views
4

내 코드는 여기에 있습니다 : 내부 클래스에서 값을 반환하는 방법은 무엇입니까?

public static boolean showConfirmationDialog(Context context, String title, String dialogContent) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setIcon(android.R.drawable.ic_dialog_alert); 
     builder.setTitle(title); 
     builder.setMessage(dialogContent); 
     builder.setPositiveButton("Confirm", new OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // what to do ? 
      } 
     }); 

지금, 나는 내가 "확인"버튼을 클릭 한 후 true를 반환하고 싶습니다. 그래서 어떻게 내부 클래스에서 "사실"을 반환합니까 - 메서드에 대한 OnClickListener.

도움, 감사합니다.

+0

당신이 "당신이 클래스에서 true를 반환 할"무엇을 의미합니까 정확히 모른 채? 클래스는 값을 반환하지 않고 메서드 만 수행합니다. 그리고 당신의 메소드는'void '리턴 타입을 가지며, 이것은 아무것도 반환하지 않는다는 것을 의미합니다. –

+0

귀하의 질문은 청취자의 업무 방식을 완전히 이해하지 못했음을 나타냅니다. 아마도 당신이 성취하려고하는 것이 무엇인지 설명해 주시겠습니까? 라인 사이를 읽으면서, 당신이 관심을 가질만한 것이 모덜 다이얼로그 (modal dialog) 접근법 인 것처럼 보입니다. 안드로이드에서는 불가능합니다. 그러나 [이 질문] (http://stackoverflow.com/questions/6120567/android-how-to-get-a-modal-dialog-or-similar-modal-behavior) 및/또는 [이 다른 질문] (http : //stackoverflow.com/questions/2028697/dialogs-alertdialogs-how-to-block-execution-while-dialog-is-up-net-style)이 유용 할 수 있습니다. –

+0

사실,이 질문 : [안드로이드에 예/아니오 대화 상자를 표시하는 방법?] (http://stackoverflow.com/questions/2478517/how-to-display-a-yes-no-dialog-box-in - 안드로이드)는 실제로 당신이 물어 보려고하는 것과 가장 비슷합니다. –

답변

8

내부 클래스에서 물건을 반환 할 수 없습니다. 이 경우에는별로 의미가 없습니다. 프로그램이 뭔가를 반환 할 때까지 onClick 함수 내부에서 대기해야합니까? 그것은 청취자가 실제로 일하는 방식이 아닙니다. 당신이해야 할 일은 "true"가 반환되면 실행 계획을 세우고 내부 클래스에 넣는 것입니다.

2

메서드 변수가 아닌 인스턴스 변수에 대한 수익을 설정해야하지만, 동시성 문제가 발생할 수 있으며 "컨테이너"개체를 사용할 수도 있습니다. 합격하거나 반환 할 반환 값을 설정할 수있는 "최종"메서드 변수를 사용하십시오. 그러나 "return"이라는 용어를 느슨하게 사용합니다. 예를 들어 적어도이 코드는 즉시 실행되지 않으므로 내부 클래스 내에서 관심있는 처리를 수행해야합니다.

2

OnClickListeners는 값을 반환하지 않습니다. 당신은 클릭 리스너 화재 내가 당신에게 세부 사항을 제공하지 못할 때 할 필요가 있지만,

private boolean classBoolean = false; 
public static boolean showConfirmationDialog(Context context, String title, String dialogContent) { 

    //local variables must be declared final to access in an inner anonymous class 
    final boolean localBoolean = false; 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setIcon(android.R.drawable.ic_dialog_alert); 
    builder.setTitle(title); 
    builder.setMessage(dialogContent); 
    builder.setPositiveButton("Confirm", new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // what to do ? 
      //you can't change a local var since to access it it needs to be final 
      //localBoolean = true; can't do this 
      //so you can change a class var 
      classBoolean = true; 
      //or you can also call some method to do something 
      someMethod(); 
     } 
    }); 
+1

이것은 작동하지 않습니다. 'localBoolean = true'는 final로 선언 되었기 때문에 예외를 throw합니다. –

+2

당신 말이 맞아요. 내가 편집 했어요. 내가 썼을 때 내가 생각하고 있던 것이 뭔지 모르겠다. .... – triggs

관련 문제