2013-10-04 6 views
3

Когда пользователь clik на кнопке Register, появляется диалоговое окно Custom Dialog и пользователь переходит в меню. Но в моем случае диалоговое окно Costum отображается всего на одну секунду, а затем пользователь переходит к следующей компоновке.Задать время для пользовательского диалога

Как установить время для пользовательского диалога, пожалуйста?

Вот мой код:

buttonRegister.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 

        final String name = inputName.getText().toString(); 
        final String mail = inputEmail.getText().toString(); 
        final String password = inputPassword.getText() 
          .toString(); 

        PatientFunctions patientFunction = new PatientFunctions(); 

        json = patientFunction.registerPatient(name, mail, 
          password); 

        try { 
         if (json.getString(KEY_SUCCESS) != null) { 

          String res = json.getString(KEY_SUCCESS); 
          if (Integer.parseInt(res) == 1) { 
           Intent main = new Intent(
             getApplicationContext(), Main.class); 
           main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
           startActivity(main); 
           finish(); 
          } 
         } 
        } catch (NumberFormatException e) { 
         e.printStackTrace(); 
        } 

        catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 

      CustomizeDialog customizeDialog = new CustomizeDialog(RegisterPatient.this); 
      customizeDialog.show(); 

          Handler handler = null; 
      handler = new Handler(); 
      handler.postDelayed(new Runnable(){ 
       public void run(){ 
        customizeDialog.cancel(); 
        customizeDialog.dismiss(); 
       } 
      }, 3000); 

     } 
    }); 
+0

и хотите, чтобы показать диалог, ожидая запроса «http», правильно? –

+0

Я хочу отклонить диалог и перейти к следующей схеме (намерению) в то же время –

ответ

0

Есть много хороших вариантов, включая AlarmManager, Timer & TimerTask

Вы можете использовать handler тоже так:

Handler handler = null; 
handler = new Handler(); 
handler.postDelayed(new Runnable(){ 
    public void run(){ 
     customdialog.cancel(); 
     customdialog.dismiss(); 
    } 
}, 500); 
+0

Спасибо! Но он не работает, когда я редактировал свой код. Я перехожу непосредственно к следующей компоновке (Intent) –

+0

@Farbhyn, что не работает, что происходит вместо этого? – ilovepjs

+0

Фактически Диалоговое окно появляется и исчезает непосредственно (0,5 секунды), а затем я перехожу к следующему макету. Я думаю, что, поскольку два потока работают в одно и то же время, я не уверен:/ –

0

лучший способ этот процесс необходимо использовать AsyncTask класс

и переопределить onPreExecute и doInBackground и onPostExecute

см the official guide

реализовать метод doInBackground() обратного вызова, который работает в пул фоновых потоков. Чтобы обновить свой пользовательский интерфейс, вы должны реализовать onPostExecute(), который доставляет результат из doInBackground() и запускается в потоке пользовательского интерфейса, поэтому вы можете безопасно обновлять свой интерфейс. Затем вы можете запустить задачу по телефону выполнить() из пользовательского интерфейса резьбы

private class Registration extends AsyncTask<String, Void, String>{ 

    CustomizeDialog customizeDialog; 
    @Override 
    protected void onPreExecute() { 
     // show ur dialog 
     customizeDialog = new CustomizeDialog(RegisterPatient.this); 
     customizeDialog.show(); 
    } 
    @Override 
    protected String doInBackground(String... params) { 

     final String name = params[0]; 
     final String email = params[1]; 
     final String password = params[2]; 

     PatientFunctions patientFunction = new PatientFunctions(); 

     json = patientFunction.registerPatient(name, mail, 
       password); 

     try { 
      if (json.getString(KEY_SUCCESS) != null) { 

       String res = json.getString(KEY_SUCCESS); 
       return res; 
      } 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } 

     catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     if (Integer.parseInt(res) == 1) { 
      if(customizeDialog != null) 
       customizeDialog.dismiss(); 

      Intent main = new Intent(
        getApplicationContext(), Main.class); 
      main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      //move to the next activity 
      startActivity(main); 
      finish(); 
     } 
    } 

} 

Редактировать

, а затем выполнить его, что вы хотите

buttonRegister.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       final String name = inputName.getText().toString(); 
       final String mail = inputEmail.getText().toString(); 
       final String password = inputPassword.getText() 
         .toString(); 
       new Registration().execute(name,mail,password); 
      } 
    }); 
+0

Спасибо большое! :) –

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