I'm developing a very simple game in android(that runs in a non-UI thread), I want to make that, when the game is over, it shows a custom dialog box with the score, but the class isn't in the MainActivity class. I can't figure out how to create the dialog in the thread whitout getting any error.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
There are so many ways to do that. One way is to pass your context to the class constructor of the game to be able to access the UI through it.
public class MyGame {
private Context context;
private Handler handler;
public MyClass(Context context) {
this.context = context;
handler = new Handler(Looper.getMainLooper());
}
...
}
and when initializing from activity
MyGame game = new MyGame(this);
and to show the dialog in your game class, just use this code
handler.post(new Runnable() {
public void run() {
// Instanitiate your dialog here
showMyDialog();
}
});
and this how to show a simple AlertDialog.
private void showMyDialog() {
new AlertDialog.Builder(context)
.setTitle("Som title")
.setMessage("Are you sure?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
回答2:
You need to go back to the UI thread to show the dialog, but you will need a reference to the current Activity (MainActivity I assume) to access to the UI thread and to use as a Context of the dialog. Check the method runOnUiThread