シェーカーがあり、シェイクモーションでダイアログを表示したい。また、複数のシェイクが実行されると問題が発生するため、複数のダイアログが表示されます。一度に 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;
}
}