2013-02-11 3 views
0

Я переопределении функции из интерфейса (который я не могу изменить), скажемФункция с возвращаемым значением использует AlertDialog

public abstract int getResult(); 

В этой функции, я хотел бы спросить пользователя о том, что результат должен быть, используя AlertDialog. Так что моя реализация должна быть что-то вроде:

public int getResult() { 
    int result; 

    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      switch (which){ 
      case DialogInterface.BUTTON_POSITIVE: 
       result = 1; 
       break; 

      case DialogInterface.BUTTON_NEGATIVE: 
       result = 2; 
       break; 
      } 
     } 
    }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("What is the result?").setPositiveButton("1", dialogClickListener) 
     .setNegativeButton("2", dialogClickListener).show(); 

    return result; 
} 

Очевидно, что это не будет работать из-за асинхронной природы AlertDialog. Каков правильный способ справиться с такой ситуацией?

ответ

0

вы должны запустить этот код только на UI тему, как:

runOnUiThread(new Runnable() { 
     public void run() { 
      getResult(); 
     } 
    }); 

или

public int getResult(){ 
     runOnUiThread(new Runnable() { 
     public void run() { 
      // your code 
     } 
    }); 
} 
Смежные вопросы