80,362
社区成员
发帖
与我相关
我的任务
分享
import java.util.Calendar;
import java.util.Date;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TimePicker;
public class AlarmView extends LinearLayout {
private Button btnAddAlarm;
private ListView lvAlarmList;
private ArrayAdapter<AlarmData> adapter;
public AlarmView(Context context) {
super(context);
}
public AlarmView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AlarmView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
btnAddAlarm = (Button) findViewById(R.id.btnAddAlarm);
lvAlarmList = (ListView) findViewById(R.id.lvAlarmList);
adapter = new ArrayAdapter<AlarmView.AlarmData>(getContext(),
android.R.layout.simple_list_item_1);
lvAlarmList.setAdapter(adapter);
btnAddAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addAlarm();
}
});
}
private void addAlarm(){
Calendar c = Calendar.getInstance();
new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar setTime = Calendar.getInstance();
setTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
setTime.set(Calendar.MINUTE, minute);
Calendar currentTime = Calendar.getInstance();
if(setTime.getTimeInMillis() <= currentTime.getTimeInMillis()){
setTime.setTimeInMillis(setTime.getTimeInMillis()+24*60*60*1000);
}
adapter.add(new AlarmData(setTime.getTimeInMillis()));
}
}, c.get(Calendar.HOUR_OF_DAY), Calendar.MINUTE, true).show();
}
private static class AlarmData{
private long time = 0;
private String timeLabel = "";
private Calendar date;
public AlarmData(long time) {
this.time = time;
date = Calendar.getInstance();
date.setTimeInMillis(time);
timeLabel = String.format("%d月%d日 %d:%d",
date.get(Calendar.MONTH)+1,
date.get(Calendar.DAY_OF_MONTH),
date.get(Calendar.HOUR_OF_DAY),
date.get(Calendar.MINUTE));
}
public long getTime() {
return time;
}
public String getTimeLabel() {
return timeLabel;
}
@Override
public String toString() {
return getTimeLabel();
}
}
}
tpd = new TimePickerDialog(getContext(), otsl, hourOfDay, min, true){
@Override
protected void onStop() {
//super.onStop();
}
};
把里面的super.onStop()注释掉就行了。Calendar cc = Calendar.getInstance();
adapter.add(new AlarmData(cc.getTimeInMillis()));
结果就出现一个,说明不是adapter的问题。
我觉得是TimePickerDialog的问题,因为弹出Set time对话框,点击Done就会出现两个相同的闹钟,
如果点击屏幕中Set time对话框以外的地方,对话框也会消失,这时候就只有一个闹钟。