lo que va dentro del constructor de diálogo
Frecuentes
Visto 1,088 veces
0
Sé que debe ser contexto. ¿Qué es exactamente un contexto? por lo general, cuando creo un diálogo en una clase, hago algo como esto:
final Dialog dialog = new Dialog(this);
pero ahora estoy tratando de crear un cuadro de diálogo en AsyncTask<>, por lo tanto, no puedo hacer lo anterior porque Evidentemente, AsyncTask no es un contexto. AsyncTask es una clase en sí misma, lo que quiere decir que no es una subclase en este momento.
public class popTask extends AsyncTask<Void, Void, String> {
Context con =
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
final Dialog dialog = new Dialog(con);
dialog.setContentView(R.layout.custom);
dialog.setTitle("New & Hot advertise");
// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.yoda);
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
}
2 Respuestas
0
Las siguientes son las dos formas en que puede enviar su contexto desde la actividad donde está ejecutando su AsyncTask:
popTask pTask = new popTask(mContext); //OR
pTask.execute(mContext);
En su popTask
cree una variable privada donde pueda establecer su contexto.
En la primera opción necesitas tener un constructor para tu clase. popTask
donde estás aceptando un contexto.
Para la segunda opción, si no está pasando nada significativo a la función doInBackground()
puedes cambiar la siguiente línea:
public class popTask extends AsyncTask<Object, Void, String>
protected Object doInBackground(Object... params) {
this.mContext = (Context) params[0];
}
recibirá el objeto de contexto en el doInBackground()
que puede establecer en la variable de contexto privado de la popTask
clase y luego acceda a ella en el doInBackground()
función.
Respondido el 12 de junio de 12 a las 16:06
0
Para agregar a la respuesta de Samir
Modifique su código para tener un constructor que tome el contexto de la clase de llamada.
public class popTask extends AsyncTask<Void, Void, String> {
private Context context;
public popTask(Context context)
{
this.cotext=context;
}
y entonces Dialog dialog = new Dialog(context);
En su actividad de llamadas, llame a este Asynctask así
new popTask(ActivityName.this).execute();
Respondido el 12 de junio de 12 a las 16:06
parece aceptar ActivityName.class pero en su lugar ActivityName.this. no estoy seguro acerca de la diferencia... solo hacértelo saber. Gracias de nuevo por la ayuda - jl
oh, lo siento... debería ser ActivityName.this... Actualicé mi respuesta. También acepte la respuesta para que sea útil para otras personas que tienen un problema similar. - vipul
ahora no hay errores de compilación, pero el cuadro de diálogo simplemente no aparece... ¿tal vez necesito usar runOnUiThread() en alguna parte? - jl
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android android-asynctask android-dialog or haz tu propia pregunta.
después de crear la primera opción. - jl
puedo ejecutar haciendo pTask.execute(); - jl
Sí, he incluido un OR que significa cualquiera de las dos soluciones, pero no ambas a la vez. Si está utilizando la primera opción, entonces puede usar
pTask.execute()
. Espero que la respuesta haya sido útil. - arun george