gpt4 book ai didi

java - DialogFragment时间选择器onCancel和onDismiss问题

转载 作者:行者123 更新时间:2023-12-02 08:54:43 25 4
gpt4 key购买 nike

我尝试实现一个由 SwitchCompat 打开的时间选择器,因此当我启用该选项时,时间选择器会显示出来,它工作正常,但如果我按取消或后退按钮或只是按外部按钮时间选择器中,开关保持在打开位置,当我不在时间选择器中选择时间时,我希望它回到关闭位置。认为也许 onCancel 方法可以提供帮助,但事实并非如此,或者只是我在实现它时犯了一些错误,有相关代码:

public class Settings extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener, TimePickerDialog.OnDismissListener, TimePickerDialog.OnCancelListener {
private EditText textLastHour;
private KeyListener keyListener;
private SwitchCompat hourSwitch;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);

textLastHour = findViewById(R.id.finalHourText);
textLastHour.setKeyListener(null);
textLastHour.setHint("Option not selected");

hourSwitch = findViewById(R.id.switch_hour);

hourSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
DialogFragment timePicker = new TimePickerFragment();
timePicker.show(getSupportFragmentManager(), "time picker");

} else {
textLastHour.setText("");
}
}
});
}


@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
textLastHour = findViewById(R.id.finalHourText);
textLastHour.setText("Final alarm at: " + hourOfDay + ":" + minute);
}

@Override
public void onCancel(DialogInterface dialog) {
hourSwitch.setChecked(false);
}

@Override
public void onDismiss(DialogInterface dialog) {
hourSwitch.setChecked(false);
}
}

我已经尝试了onDismissonCancel,但都没有在这里工作,是否有任何解决方案可以让开关在取消时间后返回到原始位置采摘者?将 DatePicker 添加到标签中,因为我觉得它可能具有与 TimePicker 相同的解决方案来解决该问题。

我的TimePickerFragment类:

public class TimePickerFragment extends DialogFragment {

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);

return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, DateFormat.is24HourFormat(getActivity()));
}
}

最佳答案

它实际上比我想象的要简单,您所需要做的就是添加一个关闭监听器并相应地更改您的用户界面/逻辑

TimePickerDialog dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

}
}, 10, 10, true);

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Toast.makeText(MainActivity.this, "dismissed", Toast.LENGTH_LONG).show();
}
});

dialog.show();

您可以使用标准的TimePickerDialog

编辑:将除 dialog.show() 之外的所有内容都放入 onCreate() 中,dialog.show() 进入 ifChecked in开关

关于java - DialogFragment时间选择器onCancel和onDismiss问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60554358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com