TimePicker.getHour () и TimePicker.getMinute () возвращает текущий час и минуту - PullRequest
0 голосов
/ 18 мая 2019

Я делаю приложение для напоминания. У него есть действие, в котором вы видите свои тревоги и плавающую кнопку действия, чтобы добавить новую тревогу. С этой кнопки открывается мой пользовательский диалог для установки будильника. Предполагается, что будут возвращены часы и минуты, выбранные в TimePicker, но вместо этого будут возвращены текущие часы и минуты
Это класс:

public class AlarmKurDialog extends AppCompatDialogFragment {

TimePicker timePicker;
SeekBar seekBar;
TextView bardakAdetiTxt;
Button alarmEkleBtn;

int quantity;
int hour;
int minute;

AlarmKurDialogListener listener;
public interface AlarmKurDialogListener{
    void alarmBilgisiGetir(int hour, int minute, int quantity);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.dialog_alarm_kur, null);
    builder.setView(view);

    timePicker = view.findViewById(R.id.timePicker1);
    seekBar = view.findViewById(R.id.seekBar);
    bardakAdetiTxt = view.findViewById(R.id.txt_adet);
    alarmEkleBtn = view.findViewById(R.id.button);

    timePicker.setIs24HourView(true);

    if (Build.VERSION.SDK_INT >= 23 ) {
        // getHour and getMinute returns current hour and minute
        hour = timePicker.getHour();
        minute = timePicker.getMinute();
        Log.i("mert", "getHour:getMinute - " + hour + ":" + minute);
    }
    else {
        hour = timePicker.getCurrentHour();
        minute = timePicker.getCurrentMinute();
        Log.i("mert", "getCurrentHour:getCurrentMinute - " + hour + ":" + minute);
    }
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
            quantity = 1 + progress;
            bardakAdetiTxt.setText(String.valueOf(quantity));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {}

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {}
    });

    alarmEkleBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listener.alarmBilgisiGetir(hour, minute, quantity);
            dismiss();
        }
    });
    return builder.create();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try{
        listener = (AlarmKurDialogListener) context;
    }catch (ClassCastException e){
        throw new ClassCastException(context.toString() + "AlarmKurDialogListener implement etmek gerekli");
    }
}}


enter image description here
Что я тут не так делаю?

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

попробуйте это:

 alarmEkleBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            hour = timePicker.getHour();
            minute = timePicker.getMinute();

            listener.alarmBilgisiGetir(hour, minute, quantity);
            dismiss();
        }
    });
1 голос
/ 18 мая 2019

Эта часть вашего кода находится внутри onCreateDialog метода:

if (Build.VERSION.SDK_INT >= 23 ) {
    // getHour and getMinute returns current hour and minute
    hour = timePicker.getHour();
    minute = timePicker.getMinute();
    Log.i("mert", "getHour:getMinute - " + hour + ":" + minute);
}
else {
    hour = timePicker.getCurrentHour();
    minute = timePicker.getCurrentMinute();
    Log.i("mert", "getCurrentHour:getCurrentMinute - " + hour + ":" + minute);
}

Это означает, что вы присваиваете значение hour и minute В МОМЕНТ создания диалогового окна, после чего он просто возвращает текущее время. Что вы хотите сделать, это переместить весь этот блок кода в кнопку отправки при прослушивании щелчка:

alarmEkleBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // --------------->>>>>PUT THAT CODE HERE INSTEAD! <<<<<-------------------------
        listener.alarmBilgisiGetir(hour, minute, quantity);
        dismiss();
    }
});

Таким образом, вы фактически получите последнее установленное значение из средства выбора.

...