2013-11-16 4 views
0

Я хочу, чтобы получить пол пользователя, прежде чем он может продолжать использовать программу, таким образом, я использовал Asyc классКак Modal Dialog андроид

class conectNet extends AsyncTask<Void,Void,Void> 

я сделал первый, чтобы избежать использования сети внутри основного макета. , а затем я Показать диалог, который просит пользователя определить его пол:

protected void onPostExecute(Void result){ // this method can use UI as mentioned in its docs 
... 

... 

главный смысл моего вопроса

Я делаю диалог и хочу, чтобы остановить поток, пока я не получу ответа пользователя:

... 
    ... 
    AlertDialog.Builder builder = new AlertDialog.Builder(SendRandom.this); 
    builder.setTitle("gender"); 
    builder.setMessage(R.string.Gender_dialogQ); //Gender_dialogQ=select your gender! 
    // Set up the buttons 
    builder.setPositiveButton("Male", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     userGender=Gender.MALE;//put value on mainClass proprty (userGender) 
    synchronized (Thread.currentThread()){ 
     Thread.currentThread().notify(); // here is the POINT : resume the thread when selection done 
     } } }); 
     builder.setNegativeButton("Female", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     userGender=Gender.FEMALE; 
     dialog.cancel(); 
     synchronized (Thread.currentThread()){ 
     Thread.currentThread().notify();}}}); 
     builder.show();// show dialogue and then pause the thread by next line 
     try { 
     synchronized(Thread.currentThread()){ 
     Thread.currentThread().wait();} 
        } catch...... 
    .... 

это делают, возможно, андроид программы, чтобы остановить и близко

любые suggesti дополнения ??

ответ

1

Вам не нужно все Threads, synchronized и т.д ... просто использовать setCancelable на вашем AlertDialog.Builder. Это заставит пользователя выбрать и опцию перед продолжением или закрытием Dialog.

AlertDialog.Builder builder = new AlertDialog.Builder(SendRandom.this); 
builder.setTitle("gender"); 
builder.setCancelable(false); // here 
builder.setMessage(R.string.Gender_dialogQ); //Gender_dialogQ=select your gender! 
// Set up the buttons 
... 
+0

вопрос, останавливает ли это программу от продолжения до тех пор, пока диалог не уйдет? – EsmaeelQash

+0

Не обязательно в зависимости от того, что у вас есть, но вы можете использовать 'onDissmissListener' для запуска кода после его закрытия. – codeMagic

+0

onDissmissListener и onClick - это то же самое в моей настройке, thu, Ever, если я использовал (уведомлять) в onDissmissListener, как я, использовал (уведомлять) в Onclick! – EsmaeelQash

0

Диалог будет работать в потоке пользовательского интерфейса, так как диалог является элементом пользовательского интерфейса. Итак, я не уверен, что вы делаете с AsyncTask и материалами для потоковой передачи. Избавься от всего этого.

+0

нет никакого способа, чтобы приостановить основной пользовательский интерфейс, поэтому я стараюсь, чтобы приостановить свою независимую нить ... из-за меня не может продолжаться без страховать я пол пользователя Его важный для продолжает .. – EsmaeelQash

+0

ли Thread.currentThread вернуть поток основного макета ?????? Я нахожусь в AsyncTask, потому что я не в основном макете – EsmaeelQash

+0

Я вижу, что Asyc не является нитью, поэтому я заменяю «Currentthread» на: , это было «this.waite()» , но ничего нового в результате !! – EsmaeelQash