因為實習項目中涉及到類似於時鍾設置鬧鍾反復時間的原因須要使用對話框的方式呈現。因為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的朋友有所幫助~