-1

シェーカーがあり、シェイクモーションでダイアログを表示したい。また、複数のシェイクが実行されると問題が発生するため、複数のダイアログが表示されます。一度に 1 つのダイアログのみを表示したい。

だから私はこのコードを書きましたが、エラーが表示されます。ある行は "final AlertDialog" を要求し、別の行は "final" なしでそれを要求します

      public void onShake() {

        final AlertDialog builder = null;
         if(!builder.isShowing()){

            builder = new AlertDialog.Builder(getParent()).create(); -- error if final is casted on AlertDialog -- "The final local variable builder cannot be assigned. It must be blank and not using a compound assignment"

            builder.setTitle("Shake");


            builder.setButton("OK", new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int which){
                    builder.dismiss(); -- requires final AlertDialog -- "Cannot refer to a non-final variable builder inside an inner class defined in a different method"

                }
            });
            builder.show();

      }}

編集:ありがとう、dialog.builder(); 動作しているように見えます。しかし今、私は新しい問題に直面しました - NullPointerException が行にスローされ、アラート ダイアログが表示されているかどうかを確認します。今私はしようとしています:

if(builder.isShowing() == false)

NullPointerException を修正

if(builder == null){
builder.setButton("OK", new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int which){
                    dialog.dismiss();
                    builder = null; 
}
}
4

3 に答える 3

2

builder.dismiss()に変更dialog.dismiss()

于 2012-12-13T18:48:03.960 に答える
0

削除builder.dismiss();して置き換えdialog.dismis()ます。リスナーには、イベントがトリガーされたダイアログに対応するダイアログオブジェクトが表示されます。

于 2012-12-13T18:48:41.467 に答える
0

AlertDialogをアクティビティのフィールドとして宣言し、finalとして設定する必要はありません。

于 2012-12-13T18:49:22.770 に答える