Android: AsyncTask ProgressDialog no se abrirá en ActivityGroup

Estoy intentando tener un diálogo del progreso de aa abierto cuando sondeo mi servidor. La clase es un ActivityGroup porque está anidada dentro de una barra de pestañas. Para mantener la vista dentro del marco, se necesita el ActivityGroup. Esta es la declaración de mi clase de ActivityGroup:

public class CheckInActivity extends ActivityGroup{ ... public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.checkin); new LocationControl().execute(this); 

Ahora mi clase AsyncTask está dentro de la misma CheckInActivityClass como tal:

 private class LocationControl extends AsyncTask<Context, Void, Void> { private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this); protected void onPreExecute() { this.dialog.setMessage("Determining your location..."); this.dialog.show(); } 

Cuando ejecuto la aplicación dada a través de un error relativo a WindowManager $ BadTokenException. Declarando que no puede iniciar la ventana con un token desconocido. He intentado hacer una aplicación de ejemplo que es sólo una actividad regular (no ActivityGroup) y funcionó bien.

¿Alguien sabe cómo modificar esto para que funcione, o un trabajo que permita que la barra de progreso se anida dentro de la barra de pestañas? Cualquier ayuda es muy apreciada.

Si el ActivityGroup está dentro de una TabActivity, tiene actividades anidadas con más de dos niveles. Android no admite esto en este momento, pero existe una solución. Debe pasar la actividad principal al diálogo.

Cree un método auxiliar para este propósito en la clase de actividad:

 private Context getDialogContext() { Context context; if (getParent() != null) context = getParent(); else context = this; return context; } 

Luego cambia la línea

 private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this); 

a

 private final ProgressDialog dialog = new ProgressDialog(getDialogContext()); 

Simple aquí también puede utilizar los siguientes

 private final ProgressDialog dialog = new ProgressDialog(getParent()); 

Funciona perfectamente para mí.

Si getParent () no funciona para usted, intente utilizar TabsActivity.context (o sustituya el nombre de su clase de actividad de la pestaña principal). Estoy usando actividades anidadas y como resultado el uso de getParent () todavía no está devolviendo el contexto adecuado para el diálogo, ya que necesita el contexto de la actividad que extiende TabsActivity, no el padre inmediato.

Solución simple:

  1. Deberá crear una variable de contexto en la clase TabsActivity. Algo como public static TabsActivity context; Y context=this en el método onCreate.

  2. Reemplace esta línea donde cree el diálogo:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

Con:

 AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context); 

Y funciona como un encanto.

  • Thread, Asynctask o intentService para mi aplicación?
  • Android ProgressDialog no funciona con la red móvil
  • No se puede llamar a runOnUiThread en un subproceso desde dentro de un servicio
  • Implementar un diálogo de progreso no bloqueador como playstore y facebook
  • Android: pérdida de memoria debido a AsyncTask
  • Java.net.UnknownHostException: No se puede resolver el host "<url>": ninguna dirección asociada con hostname y End of input en el carácter 0 de
  • Múltiples parámetros de entrada para el método execute () de AsyncTask
  • ¿Cómo prevenir el retraso de la interfaz de usuario al actualizar la notificación al descargar el archivo?
  • ¿Cómo devuelvo un booleano de AsyncTask?
  • Dirección heap no válida y señal fatal 11
  • Cuadro de diálogo de progreso dando excepción en asynchtask
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.