AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle("Title").setMessage("Message").setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
alertDialog.show();
//这里一定要注意,button的操作一定要写在 alertDialog.show();后面
//这里一定要注意,button的操作一定要写在 alertDialog.show();后面
//这里一定要注意,button的操作一定要写在 alertDialog.show();后面
Button btnPositive =
alertDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE);
Button btnNegative =
alertDialog.getButton(android.app.AlertDialog.BUTTON_NEGATIVE);
btnNegative.setTextColor(getResources().getColor(R.color.red));
btnNegative.setTextSize(18);
btnPositive.setTextColor(getResources().getColor(R.color.green));
btnPositive.setTextSize(18);
原因
这里从源码角度简单说一下为什么要放在后面
ctrl+左键点进去之后,下面这样第一段代码
if (!mCreated) {
dispatchOnCreate(null);
}
继续ctrl+左键
void dispatchOnCreate(Bundle savedInstanceState) {
if (!mCreated) {
onCreate(savedInstanceState); //注意oncreate方法
mCreated = true;
}
}
再瞅一瞅AlertDialog的oncreate()方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAlert.installContent();
}
ctrl+左键
public void installContent() {
final int contentView = selectContentView();
mDialog.setContentView(contentView);
setupView();
}
在setupView()方法中有这个方法
setupButtons(buttonPanel);
点击方法发现这个
mButtonPositive = (Button) buttonPanel.findViewById(android.R.id.button1);
mButtonPositive.setOnClickListener(mButtonHandler);
这就说明了button的绑定是在show()方法时进行的,所以对button的操作要放到show()方法后面,这样就能避免空指针了
```