![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
![]()
Tengo el sgte codigo...
btn1 = (Button)findViewById(R.id.button1); // btn1.setBackgroundColor(Color.TRANSPARENT); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final EditText txt1 = (EditText)findViewById(R.id.editText1); final EditText txt2 = (EditText)findViewById(R.id.editText2); final String resul; // if(txt1.getText().toString().trim().equals("")) { Toast toast2 = Toast.makeText(getApplicationContext(),"Ingrese un numero: ", Toast.LENGTH_LONG); //toast1.setGravity(gravity, xOffset, yOffset) toast2.setGravity(Gravity.CENTER | Gravity.BOTTOM ,0,0); toast2.show(); txt1.requestFocus(); } else if(txt2.getText().toString().trim().equals("")) { Toast toast1 = Toast.makeText(getApplicationContext(),"Ingrese un numero: ", Toast.LENGTH_LONG); //toast1.setGravity(gravity, xOffset, yOffset) toast1.setGravity(Gravity.CENTER | Gravity.BOTTOM ,0,0); toast1.show(); txt2.requestFocus(); } else { dialogo(); double a = Double.parseDouble(txt1.getText().toString()); double b = Double.parseDouble(txt2.getText().toString()); double suma = a+b; resul = String.valueOf(suma); Toast toast1 = Toast.makeText(getApplicationContext(),"Su Resultado es "+resul, Toast.LENGTH_SHORT); toast1.setGravity(Gravity.CENTER | Gravity.BOTTOM ,0,0); toast1.show(); txt1.setText(""); txt2.setText(""); //finish(); notificar(); } } }); y este es el codigo del metodo dialogo ublic void dialogo(){ dialog = ProgressDialog.show(MainActivity.this, "","Loading. Please wait...",true,false); dialog.setCancelable(true); Thread hilo = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } dialog.dismiss(); } }); hilo.start(); dialog.show(); } el problema radica que se me presenta el process dialog al mismo tiempo que el toast!! y lo que deseo es que primero me aparezca el process dialog y luego de los 2 segundos me aparezca el toast con el resultado si alguien me puede dar una mano muchas gracias |
|
#2
|
||||
|
||||
La presentación del dialogo y el toast están en el mismo hilo. Y Android no va a pintar la pantalla hasta que el onClick termine (porque está en el mismo hilo que el onDraw), así que por eso se muestran los 2 al mismo tiempo.
¿Cómo solucionarlo? Poniendo todo el código que va después de "dialogo()" dentro de "hilo". Así lo que ocurre es que se muestra dialogo, se inicia el hilo, onClick termina, se pinta el ProgressDialog y ya a los 2 segundos se muestra el toast y el ProgressDialog se quita. |
Gracias de parte de: | ||
#3
|
Gracias hermano... !!! lo aplique y muy cierto... ahora tengo otro problema en otro button necesito que mi progress bar cuando llegue a 100 % se reinicie y vuelva a 0 como lo puedo realizar?
btn2.setClickable(false); new UpdateProgress().execute(); dialogo(); txt1.setText(""); txt2.setText(""); txt1.requestFocus(); Este es mi codigo y mas abajo esta definida el metodo UpdateProgress public class UpdateProgress extends AsyncTask<Void, Integer, Void>{ int progress; @Override protected void onPostExecute(Void result) { btn2.setClickable(true); } @Override protected void onPreExecute() { progress = 0; } @Override protected void onProgressUpdate(Integer... values) { probar.setProgress(values[0]); } @Override protected Void doInBackground(Void... params) { while(progress<100){ progress+=5; publishProgress(progress); SystemClock.sleep(100); } return null; } } en que estoy fallando para que mi progressbar no se reinicie a lo que llega a 100?? |
#4
|
||||
|
||||
Cambia el doInBackground por esto:
protected Void doInBackground(Void... params) { while(true){ progress = (progress + 5)%100; publishProgress(progress); SystemClock.sleep(100); if (condicionEspecial) return; } } condicionEspecial es lo que hace que se salga del bucle y doInBackground termine. |
Gracias de parte de: | ||
#5
|
ahora te tengo otra pregunta tengo el mismo codigo con una variacion
public class UpdateProgress extends AsyncTask<Void, Integer, Void>{ int progress; @Override protected void onPostExecute(Void result) { } @Override protected void onPreExecute() { progress = 0; } @Override protected void onProgressUpdate(Integer... values) { progressBar.setProgress(values[0]); } @Override protected Void doInBackground(Void... params) { for (int i = 0; i < 150; i++) { //Simulamos cierto retraso try {Thread.sleep(100); } catch (InterruptedException e) {} publishProgress(i); // finally{ // Intent openMainList = new Intent(); // openMainList.setClass(SplashActivity.this, MainPrincipal.class); // startActivity(openMainList); // finish(); // } } return null; } } pero como es esta comentado la parte de pasar a la sgte actividad como podria hacer para una vez que llegue al 100 por ciento la barra inmediatamente me lanze una nueva actividad...?? |
#6
|
||||
|
||||
Tienes el codigo aqui con la respuesta https://github.com/set92/WorkSpace_E...nActivity.java
Basicamente lo que tu quieres es if (pbCargando.getProgress()<pbCargando.getMax()) donde pbCargando es la ProgressBar EDIT: Aun asi si te fijas en mi ejemplo he hecho 2 AsynTask donde uno va cargando la progressbar y cuando llega al tope dice Acceso concedido, otro para un reloj dentro de la propia app, y estos dos si te fijas los ejecuto en AsyncTask.THREAD_POOL_EXECUTOR , es decir que los 2 metodos se ejecutan a la vez, porque si no creo que tendian a ejecutarse uno y despues el otro en vez de simultamente, y como tenia para parar uno de los hilos pues paraba los 2 y el reloj se veia afectado, y por ultmo para hacer que realizase el intent al terminar de rellenar lo controle con la flag de isRunning puesto que cuando se rellena totalmente pone la flag a false y entra al intent, sino igual hubiera sido posible hacer un else al anterior IF y haberle llamado a un metodo, digo un metodo porque creo que dentro del doInBackground no te dejaba hacer Intents, o si no poner un IF en el onPostExecute de ese mismo hilo que eso creo que si dejaria, sinceramente no se porque lo hice con 2 hilos ![]() Última edición por set92 Día 16/02/13 a las 23:10:25 |
Gracias de parte de: | ||
#7
|
||||
|
||||
Poniendo el código comentado en onPostExecute. Así cuando termine el código de doInBackground se ejecutará. Y además lo hará en el hilo principal, que es lo correcto.
|
Gracias de parte de: | ||
#8
|
Le agradezco a los 2 que me ayudaron ahora me ha quedado mas claro el asunto...
|
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
Herramientas | |
|
|
Hora actual: 13:52:04 (GMT +2)
HTCMania: líderes desde el 2007