android - style - mostrar progresodialog en clase no activa
input dialog android (3)
Su cuadro de diálogo debe ser llamado desde UIthread así que trate de usar esto,
context.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mDialog.show();
}
});
Espero que esto funcione.
Estoy tratando de mostrar un cuadro de diálogo en una clase que no es de Actividad. Básicamente, detecto un objeto en mi aplicación, me gustaría mostrar un diálogo y luego cambiar actividades. Obtengo una "java.lang.RuntimeException: no se puede crear el controlador dentro de la secuencia que no ha llamado a Looper.prepare ()" en mi logcat.
Aquí hay algunos de mis códigos:
public ImageTargetsRenderer(Context context) {
this.context = context;
mDialog = new ProgressDialog(context);
}
public void onDrawFrame(GL10 gl) {
testFlag = 0;
// DO NOT RENDER IF THERE IS NO TRACKABLE
if (!mIsActive)
return;
// Call our native function to render content
// RENDER IF THERE IS A TRACKABLE
testFlag = renderFrame();
System.err.println("ImageTargetsRenderer reports: " + testFlag);
if(testFlag > 0 && frameCount > 5)
{
frameCount = 0;
System.err.println("Starting to switch activities.");
mDialog.setTitle("Please wait");
mDialog.setMessage("Please wait");
mDialog.show();
new Thread() {
public void run() {
try{
sleep(5000);
} catch (Exception e) { }
// Dismiss the Dialog
mDialog.dismiss();
}
}.start();
Intent myIntent = new Intent(context, FlashActivity.class);
myIntent.putExtra("com.qualcomm.QCARSamples.ImageTargets.flagTest", testFlag);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(myIntent);
testFlag = 0;
return;
}
frameCount++;
}
Tu hiciste esto
context.runOnUIThread( new Runnable() {
public void run() {
// show the Dialog
mDialog.setTitle("Please wait");
mDialog.setMessage("Please wait");
mDialog.show();
}
});
}
Thread.sleep(5000);
context.runOnUIThread( new Runnable() {
public void run() {
// Dismiss the Dialog
mDialog.dismiss();
}
});
Esta es la excepción que obtendrá si está realizando cualquier operación de IU en cualquier hilo o desde cualquier tarea de fondo. También context.runOnUiThread
no funcionará.
En su lugar use:
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
mDialog.dismiss();
}
});
Puede usar lo mismo para mostrar dónde la activity
es el objeto de la activity
.