Iamは、layout_weight = 1の3つのボタンを作成するように計画していますが、カスタムダイアログには興味がありません。そのため、以下のコードを記述しました。機能していません。常に[はい]ボタンを押すと、nullになります。このコードの何が問題になっていますか?
AlertDialog dialog= new AlertDialog.Builder(this).create();
dialog.setIcon(R.drawable.alert_icon);
dialog.setTitle("title");
dialog.setMessage("Message");
dialog.setButton(AlertDialog.BUTTON_POSITIVE,"Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
Button yesButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
Log.w("Button",""+yesButton);//here getting null
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f);
yesButton.setLayoutParams(layoutParams);
dialog.show();
よろしくお願いいたします。Android開発者。
答えはこちらをご覧ください: http://code.google.com/p/Android/issues/detail?id=636
コメント#4に記載されているように、ボタンにアクセスする前にダイアログでshow()
を呼び出す必要がありますが、ボタンは事前に使用できません。ボタンの準備ができたらすぐに変更する方法の自動ソリューションについては、 ミッキーの回答 を参照してください。
これは私にとってはうまくいきます:
_AlertDialog alertDialog = new AlertDialog.Builder(this)
.setMessage(message)
.setCancelable(true)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//do smthng
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//do snthn
}
}).create();
alertDialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) { //
Button positiveButton = ((AlertDialog) dialog)
.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_default_holo_dark));
Button negativeButton = ((AlertDialog) dialog)
.getButton(AlertDialog.BUTTON_NEGATIVE);
positiveButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_default_holo_dark));
}
});
alertDialog.show();
_
この順序でのみ、create()
の後に_alertDialog.setOnShowListener
_を呼び出します
ありがとうwieu。しかし、目的を理解する新しい開発者のために、私は以下のコードを書き直しています
AlertDialog dialog= new AlertDialog.Builder(this).create();
dialog.setIcon(R.drawable.alert_icon);
dialog.setTitle("title");
dialog.setMessage("Message");
dialog.setButton(AlertDialog.BUTTON_POSITIVE,"Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
dialog.show();
Button yesButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
Log.w("Button",""+yesButton); //here getting null
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f);
yesButton.setLayoutParams(layoutParams);