我有一个触发TimePickerDialog来设置闹钟的开关。我现在想要在关闭闹钟时关闭闹钟。另外,当我将其打开时,我想再次设置闹钟。
public class MainAddMedActivity extends AppCompatActivity {
private TextView txtAlarmPrompt;
private TimePickerDialog timePickerDialog;
private Switch switchReminder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_add_med);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.txtAlarmPrompt = (TextView) findViewById(R.id.txtAlarmPrompt);
this.switchReminder = (Switch) findViewById(R.id.switchReminder);
switchReminder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
openTimerPickerDialog(true);
timePickerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
switchReminder.setChecked(false);
}
});
}
}
});
}
private void openTimerPickerDialog(boolean is24HourView) {
Calendar cal = Calendar.getInstance();
timePickerDialog = new TimePickerDialog(
MainAddMedActivity.this,
onTimeSetListener,
cal.get(Calendar.HOUR_OF_DAY),
cal.get(Calendar.MINUTE),
is24HourView);
timePickerDialog.show();
}
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
calSet.set(Calendar.MINUTE, minute);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
if (calSet.compareTo(calNow) <= 0) {
calSet.add(Calendar.DATE, 1);
}
setAlarm(calSet);
}
};
private void setAlarm(Calendar targetCal) {
txtAlarmPrompt.setText(getString(R.string.txtPromptAlarm) + " " + targetCal.getTime());
Intent intent = new Intent(getApplicationContext(), AlarmNotificationReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmNotificationReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
***switchReminder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked = false) {
alarmManager.cancel(pendingIntent);
}
}
});*** //This Part is wrong does not work
}
答案 0 :(得分:0)
由于header('Content-Type: application/json');
。
OnCheckedChangeListener
无效
if-statement
会在if (isChecked = false)
- 语句运行之前将false
分配给变量isChecked
,因此if
- 语句的正文将是从不运行,因为if
永远不会成真。
使用isChecked
会将右侧指定为左侧的新值,而=
则会将2个值相互评估。
将您的==
语句更改为:
if
你也可以这样做:
if (!isChecked) {
alarmManager.cancel(pendingIntent);
}
但是,使用if (isChecked == false) {
alarmManager.cancel(pendingIntent);
}
或boolean
作为{true
或false
来检查if (myBoolean == true)
是if (myBoolean == false)
还是if
,这被视为不良做法{1}}直接评估booleans
。
要再次设置闹钟,您需要else
语句if
,您可以拨打alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
所以if-else
会是这样的:
if (!isChecked) {
alarmManager.cancel(pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); // Remember to change the time to a new time in millis.
}