安卓单选对话框很容易就写好了:
//...
AlertDialog dialog = builder.setTitle(R.string.please_choose)
.setSingleChoiceItems(itemStrs, chooseItemIndex, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...
}
}
)
.show();
就ok了。
在setSingleChoiceItems中,第三个参数回调了which,即选中了的单选按钮的索引下标。在此回调中处理,就是按一下选中,立马做出相应的修改,这样子缺少了“取消”,“反悔”的过程。
不过其实这样子就足够了。增加了确定和取消按钮,处理反而变得比较麻烦。
下图封装了一个性别选择对话框:
完整 代码如下:
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AlertDialog.Builder;
/**
* 性别选择对话框
* Created by lu on 2017/9/1 15:42
*/
public class ChooseSexDialog {
/**
* @param sex 初始时的性别。0女,1男
* @param listener 确定按钮监听。
*/
public static Dialog show(Context context, int sex, final OnClickOkListener listener){
Builder builder = new Builder(context);
//下标正好对应性别的值
String[] itemStrs = new String[]{
context.getString(R.string.girl),
context.getString(R.string.boy)
};
if (sex > 1) {
sex = 1;
}
final int chooseItemIndex = sex;
AlertDialog dialog = builder.setTitle(R.string.please_choose)
.setSingleChoiceItems(itemStrs, chooseItemIndex, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (listener != null){
listener.sexValue = which;
listener.isItemClick = true;
}
}
}
)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (listener!=null){
if (listener.isItemClick){//当点击选择过
listener.onPressOK(dialog,listener.sexValue);
}else {//未选择过,直接返回上一次选择的item的下标。
listener.onPressOK(dialog,chooseItemIndex);
}
}
dialog.dismiss();
}
}).show();
return dialog;
}
public static abstract class OnClickOkListener{
private int sexValue;
public boolean isItemClick = false;
public abstract void onPressOK(DialogInterface alertDialog, int sexValue);
}
}
——end