2010-08-13 14 views
5

He completado la mayor parte del juego que estoy tratando de hacer y durante todo el proyecto he creado una actividad en particular que también denomina SurfaceView y un subproceso. Puse un método update() en cada una de las 3 clases para que cada uno sepa dónde están los otros cada vez que algo cambia. Aparentemente, la única forma de hacer algo como esto es usar métodos estáticos ... Esto está bien hasta que ocurra una colisión en mi SurfaceView y quiero decirle a la actividad qué hacer. Puedo retransmitir la información, pero luego no puedo encontrar una forma de hacer un AlertDialog.Crear AlertDialog con métodos estáticos?

Entiendo que no puedo llamar a showDialog() desde un método Estático, pero no encuentro la manera de hacer un método no estático para llamarlo y luego llamar a ese método desde uno estático. He estado buscando una respuesta y he escuchado algo sobre la creación de instancias del objeto, pero no puedo entender lo que eso significa ...

Si alguien tiene una buena idea para solucionar este problema, hágamelo saber:)

+1

creo que hay que recordar que el diálogo estática se desaniman porque están vinculados a un contexto, que puede llegar a ser bastante un problema cuando la actividad es destroy (rotación de pantalla, por ejemplo) – Sephy

+0

¿Por qué no pasas el contexto a tu método estático? – Pentium10

+0

Gracias a ambos por sus respuestas. Sephy, he leído mucho que los métodos estáticos son una mala idea a largo plazo, y evité el problema tanto como pude, pero parece que no puedo encontrar una manera de evitarlo. Sé que tengo que llamar a un método en la Actividad de SurfaceView, lo que me obliga a usar un método estático ... ¿Verdad? Pentium10, lo siento, pero este es mi primer juego, entiendo un poco el contexto pero no estoy seguro de lo que quieres decir, ¿puedes señalarme un ejemplo o algo? No estoy tan preocupado con la solución del problema, ya que estoy entendiendo lo que está mal ... ¡Muchas gracias! – Aaron

Respuesta

0

SurfaceView extiende Vista y por lo tanto tiene un método getContext()

Para crear y mostrar su AlertDialog, que puede hacer el siguiente código dentro de su SurfaceView

AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
builder.setTitle("title"); 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    dialog.dismiss(); 
    } 
}); 
Dialog d = builder.create(); 
d.show(); 

Esto podría no funcionar tan Actividad. showDialog (int) si su ac La actividad se reinicia (el diálogo simplemente podría desaparecer y usted tendrá que manejar el estado por su cuenta).

Esperanza esto ayuda

9

Esto es lo que he usado:

public static void messageDialog(Activity a, String title, String message){ 
    AlertDialog.Builder dialog = new AlertDialog.Builder(a); 
    dialog.setTitle(title); 
    dialog.setMessage(message); 
    dialog.setNeutralButton("OK", null); 
    dialog.create().show();  

}