1
私はAndroidから継承したカスタムTimePickerDialogを持っています。このダイアログは、OnTimeSetListener
というインタフェースを持ち、そのコンテキストまたは親のフラグメントによって実装されなければなりません。サブクラスがオーバーライドされた親のインタフェースメソッドを呼び出さない
CustomTimePickerDialog.java
public class CustomTimePickerDialog extends DialogFragment implements
android.app.TimePickerDialog.OnTimeSetListener {
...
private OnTimeSetListener listener;
public static TimePickerDialog newInstance(int hour, int minutes) {
TimePickerDialog fragment = new TimePickerDialog();
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new android.app.TimePickerDialog(getContext(), this, 0, 0, true);
}
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minutes) {
listener.onTimeSet(hour, minutes);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Object parent = getParentFragment() == null
? context
: getParentFragment();
if (parent instanceof OnTimeSetListener) {
listener = ((OnTimeSetListener) parent);
} else {
throw new RuntimeException(parent + " must implement OnTimeSetListener");
}
}
public interface OnTimeSetListener {
void onTimeSet(int hour, int minutes);
}
}
問題はこのように、私はonTimeSet()
動作を変更するには、再度、このクラスを拡張する必要があるということです。
LimitedCustomTimePickerDialog.java
public class LimitedCustomTimePickerDialog extends CustomTimePickerDialog {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minutes) {
int standardMinutes = minutes < 30 ? 0 : 30;
super.onTimeSet(timePicker, hour, standardMinutes);
}
}
しかし、決してcalleではありませんd!どうすればこれを達成できますか?
スーパークラスのみがそれを実装しています。サブクラスは、そのメソッドをオーバーライドしています。 onTimeSetはネイティブのAndroid TimePickerDialogによって呼び出されています。これは、ユーザーがダイアログの「OK」ボタンをクリックしたときに発生します。 – josemigallas