Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 02/02/13, 04:06:40
Avatar de carrobe1390
carrobe1390 carrobe1390 no está en línea
Miembro del foro
Mensajes: 47
 
Fecha de registro: feb 2013
Localización: Guayaquil
Mensajes: 47
Modelo de smartphone: Samsung Galaxy S3
Versión de ROM: 4.1.2
Tu operador: Claro
Mencionado: 0 comentarios
Tagged: 0 hilos
Post Problema con Progress Dialog en un boton

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
Responder Con Cita


  #2  
Viejo 02/02/13, 09:18:05
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 02/02/13, 15:23:30
Avatar de carrobe1390
carrobe1390 carrobe1390 no está en línea
Miembro del foro
Mensajes: 47
 
Fecha de registro: feb 2013
Localización: Guayaquil
Mensajes: 47
Modelo de smartphone: Samsung Galaxy S3
Versión de ROM: 4.1.2
Tu operador: Claro
Mencionado: 0 comentarios
Tagged: 0 hilos
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??
Responder Con Cita
  #4  
Viejo 02/02/13, 16:56:03
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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.
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 16/02/13, 22:35:47
Avatar de carrobe1390
carrobe1390 carrobe1390 no está en línea
Miembro del foro
Mensajes: 47
 
Fecha de registro: feb 2013
Localización: Guayaquil
Mensajes: 47
Modelo de smartphone: Samsung Galaxy S3
Versión de ROM: 4.1.2
Tu operador: Claro
Mencionado: 0 comentarios
Tagged: 0 hilos
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...??
Responder Con Cita
  #6  
Viejo 16/02/13, 23:01:49
Avatar de set92
set92 set92 no está en línea
Miembro del foro
Mensajes: 468
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 16/02/13, 23:05:49
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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.
Responder Con Cita
Gracias de parte de:
  #8  
Viejo 16/02/13, 23:13:57
Avatar de carrobe1390
carrobe1390 carrobe1390 no está en línea
Miembro del foro
Mensajes: 47
 
Fecha de registro: feb 2013
Localización: Guayaquil
Mensajes: 47
Modelo de smartphone: Samsung Galaxy S3
Versión de ROM: 4.1.2
Tu operador: Claro
Mencionado: 0 comentarios
Tagged: 0 hilos
Le agradezco a los 2 que me ayudaron ahora me ha quedado mas claro el asunto...
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 13:52:04 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007