2010-08-13 2 views
5

Я завершил большую часть игры, которую я пытаюсь сделать, и на протяжении всего проекта я создал одно конкретное действие, которое также вызывает SurfaceView и Thread. Я поместил метод update() в каждый из трех классов, поэтому каждый из них знает, где другие из них каждый раз что-то меняет. По-видимому, единственный способ сделать что-то вроде этого - использовать статические методы ... Это нормально, пока в моем SurfaceView не возникнет столкновение, и я хочу сказать, что делать, что делать. Я могу передать информацию, но тогда я не могу найти способ сделать AlertDialog.Создание AlertDialog со статическими методами?

Насколько я понимаю, я не могу вызвать showDialog() из метода Static, но не могу найти способ заставить нестатический метод вызвать его, а затем вызвать этот метод из статического. Я искал ответ, и я слышал что-то о создании объекта, но я не могу понять, что это значит ...

Если у кого-то есть хорошая идея, чтобы заставить меня обойти это, пожалуйста, дайте мне знать:)

+1

Я думаю, помнить, что статический диалог не рекомендуется, так как они связаны с контекстом, который может стать довольно проблемой, когда активность является destroy (например, вращение экрана). – Sephy

+0

Почему бы вам не передать контекст вашему статическому методу? – Pentium10

+0

Спасибо вам за ваши ответы. Sephy, я много читал, что статические методы - плохая идея в долгосрочной перспективе, и я избегал проблемы настолько, насколько мог, но, похоже, я не могу найти способ обойти эту проблему. Я знаю, что мне нужно вызвать метод в Activity из SurfaceView, что заставляет меня использовать статический метод ... Правильно? Pentium10, извините, но это моя первая игра, я понимаю, что такое контекст, но я не уверен, что вы имеете в виду, можете ли вы указать мне пример или что-то еще? Я не очень беспокоюсь о том, чтобы решить проблему, поскольку я понимаю, что не так ... Большое спасибо! – Aaron

ответ

0

SurfaceView расширяет вид и, таким образом, есть метод

getContext() Чтобы создать и показать свою AlertDialog, вы можете сделать следующий код внутри 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(); 

Это не может работать, как активность. showDialog (int), если ваш ac (диалог может просто исчезнуть, и вам придется самостоятельно обрабатывать состояние).

Надеется, что это помогает

9

Вот что я использовал:

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

} 
Смежные вопросы