AlertDialogのボタンを有効・無効にする
結論から言うとこうです。
alertDialogのインスタンスからButtonを取り出し、setEnabledメソッドを呼びます。
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true); // NegativeButtonを有効に
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); // PoitiveButtonを有効に
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false); // NegativeButtonを無効に
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); // PoitiveButtonを無効に
これはどんな時に便利そうなのか?
DialogFrament内で、AlertDialogを使用している時にボタンの有効・無効が切り替えられると中々便利なのではないかと思ってます。
例えば、
DialogFramgne内でAlertDialgを生成して、その中のWebviewでページを表示する時に、loadが終わったらボタンを有効に
表示できてないのにOKボタンなどが押せるのは、おかしいですよね。
エラーじゃなかったらボタンを有効にします。
webview.setWebViewClient(new WebViewClient() {
// ページ読み込みエラー
@Override
public void onReceivedError(WebView view, int errorCode, String description, String url) {
isWebviewError = true;
}
// ページ読み込み完了時
@Override
public void onPageFinished(WebView view, String url) {
if (isWebviewError) {
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
} else {
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true);
}
}
});
webview.loadUrl("利用規約ページ");
他にも
・ネイティブ側でScrollViewやListViewが一番下までスクロールしたら有効に
・通信が終わり、Dialog内の情報が表示し終わったら有効に
・Webviewの例だと、利用規約などが表示できてたら有効に
などいろいろ使えそうな機能だと思います。