AlertDialogsを作成するための静的メソッドを作成することは良い兆候ではないことを私は知っています。ただし、AlertDialogを作成したい場合は、常にそれらをActivityサブクラス内に配置する必要があります。私はSOを探し回っており、コードを因数分解するための良い方法を見つけようとしています。これにより、ActivityサブクラスからAlertDialogsを初期化して作成する必要がなくなります。
これは私のコードの例であり、AlertDialogsのパフォーマンス速度を犠牲にしなければならないように設計されています。これは私のプロジェクト計画で非常に必要です。
public void onCreate(Bundle b) {
super.onCreate(b);
accelerometer = new Accelero();
leaderboard = new Score(this);
renderView = new RenderView(this);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(renderView);
// TODO: Refactor this, to speed things up.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
input = new EditText(this);
builder.setView(input);
builder.setTitle("Enter Name for High Score!");
builder.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO: Polish the dialog.
// TODO: Add a method of obtaining the score from RenderView.
renderView.getStage().reset();
renderView.setDialogFlag(false);
}
});
builder.setNegativeButton("Back", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
PlayActivity.this.onBackPressed();
}
});
renderView.setLosingDialog(builder.create());
builder = new AlertDialog.Builder(this);
builder.setTitle("You win!");
builder.setPositiveButton("Next Stage", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
renderView.createStage(getAssets(), stageNumber);
renderView.pauseGame();
}
});
renderView.setWinningDialog(builder.create());
builder = new AlertDialog.Builder(this);
builder.setTitle("Game Paused!");
builder.setPositiveButton("Back to Game", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
renderView.unpauseGame();
}
});
builder.setNeutralButton("Restart", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
renderView.resetGame();
}
});
builder.setNegativeButton("Main Menu", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO: Will probably improve some more on this.
PlayActivity.this.finish();
}
});
renderView.setPausingDialog(builder.create());
}
これは私が望んでいたことではありません。それらを新しいスレッドに配置して実行しようとしましたが、メモリリークが発生したため、機能しませんでした。また、問題(静的AlertDialogメソッドはメモリリークなど)のため、これを修正するための他のアイデアはありません。
次に何をしたらいいのかわからない。では、パフォーマンス速度を犠牲にすることなくAlertDialogsを初期化するためのより良い方法を他に誰が持っているのでしょうか?前もって感謝します。