Java Deitel如何编程Android Cannon游戏匿名内部类警告
我正在通过Deitel:Android编写如何编程示例,其中两个示例中,我的Android Studio对匿名内部类给出了警告/错误。它声明片段应该是静态的 正确的方法是什么?如果我创建静态的非匿名内部类,那么就没有关于该类的警告,但是我不能引用非静态类变量(?)。另一种方法是创建一个单独的类(而不是内部类),但引用变量也存在同样的问题 这个问题与示例Cannon游戏、类CannonView、方法showGameOverDialog(如下)以及FlagQuit有关Java Deitel如何编程Android Cannon游戏匿名内部类警告,java,android,Java,Android,我正在通过Deitel:Android编写如何编程示例,其中两个示例中,我的Android Studio对匿名内部类给出了警告/错误。它声明片段应该是静态的 正确的方法是什么?如果我创建静态的非匿名内部类,那么就没有关于该类的警告,但是我不能引用非静态类变量(?)。另一种方法是创建一个单独的类(而不是内部类),但引用变量也存在同样的问题 这个问题与示例Cannon游戏、类CannonView、方法showGameOverDialog(如下)以及FlagQuit有关 private void
private void showGameOverDialog(final int messageId) {
final DialogFragment gameResult =
new DialogFragment() {
@Override
public Dialog onCreateDialog(Bundle bundle) {
AlertDialog.Builder builder =
new AlertDialog.Builder(getActivity());
builder.setTitle(getResources().getString(messageId));
builder.setMessage(getResources().getString(
R.string.result_format, shotsFired, totalElapsettime
));
builder.setPositiveButton(R.string.reset_game,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialogIsDisplayed = false;
newGame();
}
});
return builder.create();
}
};
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
showSystemBars();
dialogIsDisplayed = true;
gameResult.setCancelable(false);
gameResult.show(activity.getFragmentManager(), "results");
}
}
);
}
这是我第一次尝试的同一个版本,但这里的问题是变量shotsFired和totalElapsetTime不是静态的,所以它们不能在静态方法中使用。另外,metodi newGame不是静态的。解决这个问题的一个方法是创建额外的静态变量(在这个方法中使用它们),在调用上面的MetodShowGameOverdialog之前将非静态值复制到它们。但我希望有更好的办法。
// display an AlertDialog when the game ends
private void showGameOverDialog(final int messageId) {
// DialogFragment to display game stats and start new game
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(getResources().getString(messageId));
// display number of shots fired and total time elapsed
builder.setMessage(getResources().getString(
R.string.results_format, shotsFired, totalElapsedTime));
builder.setPositiveButton(R.string.reset_game,
new DialogInterface.OnClickListener() {
// called when "Reset Game" Button is pressed
@Override
public void onClick(DialogInterface dialog,
int which) {
dialogIsDisplayed = false;
newGame(); // set up and start a new game
}
}
);
/* final DialogFragment gameResult =
new DialogFragment() {
// create an AlertDialog and return it
@Override
public Dialog onCreateDialog(Bundle bundle) {
// create dialog displaying String resource for messageId
AlertDialog.Builder builder =
new AlertDialog.Builder(getActivity());
builder.setTitle(getResources().getString(messageId));
// display number of shots fired and total time elapsed
builder.setMessage(getResources().getString(
R.string.results_format, shotsFired, totalElapsedTime));
builder.setPositiveButton(R.string.reset_game,
new DialogInterface.OnClickListener() {
// called when "Reset Game" Button is pressed
@Override
public void onClick(DialogInterface dialog,
int which) {
dialogIsDisplayed = false;
newGame(); // set up and start a new game
}
}
);
return builder.create(); // return the AlertDialog
}
};
*/
// in GUI thread, use FragmentManager to display the DialogFragment
activity.runOnUiThread(
new Runnable() {
public void run() {
final AlertDialog gameResult = builder.create();
showSystemBars();
dialogIsDisplayed = true;
gameResult.setCancelable(false); // modal dialog
// gameResult.show(activity.getFragmentManager(), "results");
gameResult.show();
}
}
);
}