2010-08-13 13 views
5

Ich habe den Großteil des Spiels, das ich versuche zu machen, abgeschlossen und während des gesamten Projekts habe ich eine bestimmte Aktivität erstellt, die auch ein SurfaceView und einen Thread aufruft. Ich lege eine update() -Methode in jede der 3 Klassen, damit jeder weiß, wo die anderen sind, wenn sich etwas ändert. Anscheinend ist die einzige Möglichkeit, etwas wie dies zu tun, statische Methoden zu verwenden ... Das ist in Ordnung, bis eine Kollision in meiner SurfaceView auftritt und ich der Aktivität mitteilen möchte, was zu tun ist. Ich kann die Informationen weiterleiten, aber dann kann ich keinen Weg finden, einen AlertDialog zu erstellen.Erstellen von AlertDialog mit statischen Methoden?

Ich verstehe, ich kann ShowDialog() nicht von einer statischen Methode aufrufen, aber ich kann keinen Weg finden, eine nicht-statische Methode zu machen, um sie aufzurufen und dann diese Methode von einer statischen aufzurufen. Ich habe nach einer Antwort gesucht und ich habe etwas über das Instanziieren des Objekts gehört, aber ich kann nicht herausfinden, was das bedeutet ...

Wenn jemand eine gute Idee hat, mich um diese zu bringen, lass es mich wissen:)

+1

Ich denke, daran zu erinnern, dass statischer Dialog entmutigt werden, weil sie zu einem Kontext verknüpft sind, die ganz ein Problem werden können, wenn die Aktivität ist zerstören (Bildschirmdrehung zum Beispiel.) – Sephy

+0

Warum übergeben Sie den Kontext nicht an Ihre statische Methode? – Pentium10

+0

Vielen Dank für Ihre Antworten. Sephy, ich habe viel gelesen, dass statische Methoden auf lange Sicht eine schlechte Idee sind, und ich habe das Problem so gut wie möglich vermieden, aber es scheint, dass ich keinen Weg finden kann. Ich weiß, dass ich eine Methode in der Aktivität von der SurfaceView aufrufen muss, die mich zwingt, eine statische Methode zu verwenden ... Richtig? Pentium10, tut mir leid, aber dies ist mein erstes Spiel überhaupt, ich verstehe irgendwie, was ein Kontext ist, aber ich bin mir nicht sicher, was du meinst, kannst du mich auf ein Beispiel oder irgendetwas hinweisen? Ich bin nicht so sehr damit beschäftigt, das Problem zu beheben, da ich verstehe, was falsch ist ... Vielen Dank! – Aaron

Antwort

0

Surface Ansicht erstreckt und somit

so erstellen und zeigen Sie Ihren Alertdialog einen getContext() -Methode hat, können Sie

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(); 

Dies könnte nicht funktionieren, da Aktivität den folgenden Code in Ihrem Surface tun. showDialog (int) wenn Ihr ac tivität wird neu gestartet (der Dialog verschwindet möglicherweise einfach und Sie müssen sich selbst mit dem Zustand befassen).

this helps

9

Hier ist, was ich verwenden:

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();  

} 
Verwandte Themen