Deitel 如何编程 Android Cannon 游戏匿名内部类警告



我正在通过Deitel编码:Android如何编程示例,其中两个我的Android Studio对匿名内部类发出警告/错误。它声明片段应该是静态的。

正确的方法是什么?如果我制作静态非匿名内部类,那么没有关于该类的警告,但我不能引用非静态类变量(?另一种方法可能是创建一个单独的类(不是内部类(,但引用变量也存在同样的问题。

这个问题在示例Cannon Game,类CannonView,方法showGameOverDialog(下图(以及FlagQuiz中。

   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");
                }
            }
    );
}
    // 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();
                    }
                }
        );
    }

最新更新