简体   繁体   English

RadioButton自身无法检查

[英]RadioButton is getting uncheck by itself

Im working on an order app. 我正在订购应用程序。 It should set visibillity of rdi_now to visible, if actual time is in open time, and else set to gone, so user have in closed time only option to choose preorder, but rdi_preorder is not doing what is should do. 如果实际时间在开放时间,则应将rdi_now的可见性设置为可见,否则将其设置为已消失,因此用户只能在封闭时间内选择预购,但rdi_preorder没有做应做的事情。 If I click in datepicker or timepicker on cancel, rdi_preorder gets unchecked. 如果我单击“日期选择器”或“取消”上的时间选择器,则rdi_preorder不会被选中。 Thats correct. 没错。 This should happen. 这应该发生。 What should not happen, is that if after click on cancel, and try to check rdi_preorder again, its get for 0.2 seconds check and then unchecked again, but date- and timepicker dialog opens, and I can set the time and setted time show in txt_time. 不应该发生的是,如果在单击“取消”后,再次尝试检查rdi_preorder,它会先检查0.2秒,然后再次取消选中,但日期和时间选择器对话框将打开,并且我可以设置时间和设置的时间显示在txt_time。 But rdi_preorder is still unchecked. 但是rdi_preorder仍未选中。 I cant find the problem in my code. 我在代码中找不到问题。

private void initView(View view) {
        rdi_delivery = (RadioButton) view.findViewById(R.id.rdi_delivery);
        rdi_pickup = (RadioButton) view.findViewById(R.id.rdi_pickup);
        rdi_now = (RadioButton) view.findViewById(R.id.rdi_now);
        rdi_preorder = (RadioButton) view.findViewById(R.id.rdi_preorder);

        txt_time = (TextView) view.findViewById(R.id.txt_time);


        rdi_preorder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b) {



                    final Calendar c = Calendar.getInstance();
                    int mHour = c.get(Calendar.HOUR_OF_DAY);
                    int mMin = c.get(Calendar.MINUTE);
                    final int currentHour = c.get(Calendar.HOUR_OF_DAY);
                    final int currentMinute = c.get(Calendar.MINUTE);
                    final int date = c.get(Calendar.DAY_OF_MONTH);
                    final int month = c.get(Calendar.MONTH);
                    final int year = c.get(Calendar.YEAR);


                    final TimePickerDialog timePickerDialog = new TimePickerDialog(getActivity(),
                            new TimePickerDialog.OnTimeSetListener() {
                                @Override
                                public void onTimeSet(TimePicker timePicker, int hour, int min) {

                                    selectedHour = hour;
                                    selectedMin = min;

                                    if (rdi_pickup.isChecked()) {
                                        if (checkOpenTime(selectedHour, selectedMin))
                                            if ((selectedDate == date && selectedMonth == month && selectedYear == year) &&
                                                    selectedHour * 60 + selectedMin < (currentHour * 60 + currentMinute + 20)) {
                                                Toast.makeText(getContext(), "Bitte bestellen Sie min. 20min vorraus!", Toast.LENGTH_SHORT).show();
                                                if (rdi_now.getVisibility() == View.VISIBLE)
                                                    rdi_now.setChecked(true);
                                                rdi_preorder.setChecked(false);
                                            } else {
                                                time_preorder = String.format("%2s:%2s %2s.%2s.%4s", selectedHour, selectedMin, selectedDate, selectedMonth, selectedYear);
                                                txt_time.setVisibility(View.VISIBLE);
                                                txt_time.setText(new StringBuilder("fur ").append(time_preorder).toString());

                                                EventBus.getDefault().postSticky(new EnableButtonNext(true));


                                            }

                                        else {
                                            Toast.makeText(getContext(), "Bitte beachten Sie unsere Öffnungszeiten!", Toast.LENGTH_SHORT).show();
                                            rdi_preorder.setChecked(false);
                                            if (rdi_now.getVisibility() == View.VISIBLE)
                                                rdi_now.setChecked(true);
                                        }
                                    } else if (rdi_delivery.isChecked()) {
                                        if (checkOpenTime(selectedHour, selectedMin)) {
                                            if ((selectedDate == date && selectedMonth == month && selectedYear == year) &&
                                                    selectedHour * 60 + selectedMin < (currentHour * 60 + currentMinute + 45)) {
                                                Toast.makeText(getContext(), "Bitte bestellen Sie min. 45min vorraus!", Toast.LENGTH_SHORT).show();
                                                if (rdi_now.getVisibility() == View.VISIBLE)
                                                    rdi_now.setChecked(true);
                                                rdi_preorder.setChecked(false);
                                            } else {
                                                time_preorder = String.format("%2s:%2s %2s.%2s.%4s", selectedHour, selectedMin, selectedDate, selectedMonth, selectedYear);
                                                txt_time.setVisibility(View.VISIBLE);
                                                txt_time.setText(new StringBuilder("fur ").append(time_preorder).toString());

                                                EventBus.getDefault().postSticky(new EnableButtonNext(true));
                                            }
                                        } else {
                                            Toast.makeText(getContext(), "Bitte beachten Sie unsere Öffnungszeiten!", Toast.LENGTH_SHORT).show();
                                            rdi_preorder.setChecked(false);
                                            if (rdi_now.getVisibility() == View.VISIBLE)
                                                rdi_now.setChecked(true);
                                        }

                                    }
                                }
                            }, mHour, mMin, true);


                    timePickerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                        @Override
                        public void onCancel(DialogInterface dialogInterface) {
                            if (rdi_now.getVisibility() == View.VISIBLE)
                                rdi_now.setChecked(true);


                        }
                    });

                    final Calendar nextDate = Calendar.getInstance();
                    if (rdi_pickup.isChecked())
                        nextDate.add(Calendar.DATE, 7);
                    else
                        nextDate.add(Calendar.DATE, 14);
                    DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
                            new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker datePicker, int year, int month, int date) {
                                    selectedDate = date;
                                    selectedMonth = month;
                                    selectedYear = year;

                                    timePickerDialog.show();
                                }
                            }, year, month, date);

                    datePickerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                        @Override
                        public void onCancel(DialogInterface dialogInterface) {
                            if (rdi_now.getVisibility() == View.VISIBLE)
                                rdi_now.setChecked(true);

                        }
                    });
                    datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
                    datePickerDialog.getDatePicker().setMaxDate(nextDate.getTimeInMillis());
                    datePickerDialog.show();

                }

            }

        });


        rdi_now.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b) {
                    EventBus.getDefault().postSticky(new EnableButtonNext(true));
                }
                txt_time.setVisibility(View.GONE);
            }
        });

        rdi_pickup.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            }
        });
        rdi_delivery.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b) {
                    EventBus.getDefault().postSticky(new EnableButtonNext(true));
                }
            }
        });

You have a few if statements in the form of: 您有一些if语句,其形式为:

...
rdi_preorder.setChecked(false);
                                            } else {
// there is no code to set preorder to true, add the following line
rdi_preorder.setChecked(true); //now when time is in the future preorder is checked

Try adding that to your if statements 尝试将其添加到您的if语句中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM