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:
- Cómo pasar en dos tipos de datos diferentes a AsyncTask, Android
- Cómo llamar a notifyDataSetChanged () de AsyncTask onPostExecute () en otra clase
- Cargando imágenes en un gridview con tarea asíncrona, no cargando correctamente
- Valor de retorno AsyncTask
- ¿Cómo puedo hacer conexiones de URL asíncronas en Android?
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.
- Enviar emisiones de asynctasks
- ¿Cómo devuelvo un resultado de una tarea asíncrona
- ¿Cómo ejecutar una tarea asíncrona para cada x min en android?
- ¿Puede OnPostExcecute método en AsyncTask RETURN valores?
- Retrofit 2 mejor práctica para android: solicitud asincrónica o solicitud síncrona en AsyncTask?
- Espere a que se complete el AsyncTask múltiple
- Java.lang.NullPointerException en android.widget.ArrayAdapter.init (ArrayAdapter.java)
- AsyncTask con rotación de pantalla - onRetainNonConfigurationInstance obsoleta
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:
-
Deberá crear una variable de contexto en la clase TabsActivity. Algo como
public static TabsActivity context;
Ycontext=this
en el método onCreate. -
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.
- Cómo reemplazar recursos de cadenas con Android Gradle
- Gson y Active Android: Se ha intentado serializar java.lang.Class. ¿Has olvidado registrar un adaptador de tipo?