2013-10-06 4 views
1

Хорошо. Прежде чем кто-нибудь укажет мне, что это дубликат, я знаю, что его уже много раз спрашивали. Но я не могу принять ни один из ответов, заданных в этих вопросах. У меня есть диалоговое окно с предупреждением в функции, которая должна возвращать логическое значение после того, как пользователь сделает выбор в диалоговом окне предупреждения. Я не могу изменить логическое значение внутри onclick, потому что у меня есть двоичный файл, который зависит от возвращаемого значения этой функции. Может ли кто-нибудь дать мне какие-нибудь идеи о том, как это сделать?Асинхронное поведение диалогового окна оповещения - Android

public static boolean allow(){ 
AlertDialog.Builder builder = new AlertDialog.Builder(act); 
     builder.setIcon(R.drawable.ic_launcher); 
     builder.setTitle("Title"); 
     builder.setCancelable(false); 
     builder.setView(text); 
     builder.setPositiveButton("Allow", new OnClickListener() { 
      public void onClick(DialogInterface dialog, int arg1) { 
       result = true; 

       if (checked) { 
        p.addapp(pkgname, applicationName, 1, byte); 
       } 

       dialog.dismiss(); 

       act.finish(); 

      } 
     }); 

     builder.setNegativeButton("Deny", new OnClickListener() { 
      public void onClick(DialogInterface dialog, int arg1) { 
       result = false; 
       if (checked) { 
        p.addapp(pkgname, applicationName, 2, byte); 
       } 
       dialog.dismiss(); 
       act.finish(); 
      } 
     }); 
     AlertDialog dlg = builder.create(); 
     dlg.show(); 
    } 
    return result; 
} 

До сих пор я пытался сделать это в асинхронном, создать новый вид деятельности для диалога и создать его экземпляр с startActivityForResult(). Также попытался поставить wait(), notify(), но не работает. Надеюсь, я скоро смогу найти решение.

ответ

0

Это просто. Не возвращайте выбор boolean в функции allow(). Верните булев и оцените их после события Dialog onClick.

Вы не можете это сделать?

void okay() { 
    // place code here 
    if (checked) { 
     p.addapp(pkgname, applicationName, 1, byte); 
    } 
}  

void cancel() { 
    // place code here 
    if (checked) { 
     p.addapp(pkgname, applicationName, 2, byte); 
    } 
} 

public static void allow(){ 
AlertDialog.Builder builder = new AlertDialog.Builder(act); 
    builder.setIcon(R.drawable.ic_launcher); 
    builder.setTitle("Title"); 
    builder.setCancelable(false); 
    builder.setView(text); 
    builder.setPositiveButton("Allow", new OnClickListener() { 
     public void onClick(DialogInterface dialog, int arg1) { 

      okay(); 

      dialog.dismiss(); 

      act.finish(); 

     } 
    }); 

    builder.setNegativeButton("Deny", new OnClickListener() { 
     public void onClick(DialogInterface dialog, int arg1) { 

      cancel(); 

      dialog.dismiss(); 
      act.finish(); 
     } 
    }); 
    AlertDialog dlg = builder.create(); 
    dlg.show(); 
} 
} 
+0

как бы я это сделал? Метод onclick является недействительным, а оператор return вызывает ошибку внутри? Я не понимаю ... вы могли бы разместить небольшой пример? Спасибо – user2515577

+0

см. Мой отредактированный ответ – Zyoo

+0

Я думаю, что в моем вопросе не было ясно. Ошибка if (checked) не является проблемой. Реальная проблема связана с результатом возврата; Он всегда возвращает false, и поэтому двоичный код всегда дает ложный ответ. Так что мне нужно, функция должна возвращать значение, основанное на нажатии пользователем из диалогового окна. – user2515577

Смежные вопросы