因为实习项目中涉及到类似于时钟设置闹钟反复时间的原因须要使用对话框的方式呈现。因为DialogFragment眼下还没实验出嵌套Fragment的方法。所以临时先用AlertDialog.Builder中的setMultiChoiceItems取代,因为网上搜索时都仅仅有显示的代码,没有关于点击事件进行操作的演示样例。所以依据项目自己整理了一下
效果图:
逻辑:用户点击取消则销毁对话框,点击确定会将勾选的星期数存下来。下次再次点击的话之前选中的星期数会自己主动勾选上
控件.setOnClickListener(//设置控件的点击事件
new OnClickListener() {
@Override
public void onClick(View v) {
boolean[] isChecked = { false, false, false, false,
false, false, false };
for (int i = 0; i < DAY_OF_WEEK.length; i++) {
if (mSelectedDays.indexOf(DAY_OF_WEEK[i]) != -1) {
isChecked[i] = true;
}
}//isChecked是一个boolean[],mSelectedDays存放的是用户之前的选择。DAY_OF_WEEK[]则是一个存放星期数的一个常量字符串数组
new AlertDialog.Builder(getActivity())
.setTitle("选择时间")//标题栏
.setMultiChoiceItems(//设置多选条目模式的对话框
new String[] { "星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日" },//选项条
isChecked,//这个參数必须是boolean[]的,不能使Boolean[]的,有几个item就数组长度几个,true为勾选,false则相反
new DialogInterface.OnMultiChoiceClickListener() {//此处的Listener导包的话须要导入DialogInterface包,假设像我一样因为这个类中须要使用到View中的Listener,则能够按我这样的方式加上前缀
@Override
public void onClick(
DialogInterface dialog,
int which, boolean isChecked) {
if (isChecked) {//which代表的是被点击的item的标号。从0開始,假设被选中即isChecked==true
if (mSelectedDays
.indexOf(DAY_OF_WEEK[which]) == -1) {
mSelectedDays
.append(DAY_OF_WEEK[which]);
}
} else {
int index = mSelectedDays
.indexOf(DAY_OF_WEEK[which]);
if (index != -1) {
mSelectedDays
.deleteCharAt(index);
}
}
}
})
.setPositiveButton("确定", //positiveButton即确定button,negativeButton为取消button
new DialogInterface.OnClickListener() {//此对确定button的点击事件进行设置于处理
@Override
public void onClick(
DialogInterface dialog,
int which) {
TextView repeatValue = (TextView) getActivity()
.findViewById(
R.id.repeat_values);
repeatValue.setText(mSelectedDays);
}
})
.setNegativeButton("取消",null).show();
}
});
return repeatFragmentView;
}
}
尽管是非常基础的知识。可是希望对初学Android的朋友有所帮助~