1

好的。所以我制作了一个日期选择器对话框,该对话框在 TextView Click 上打开。这部分工作正常。当我有 2 个日期时,我的问题就会发生。如果第二个日期早于第一个日期,那么日期选择器应该重新打开并要求一个新的“有效”日期。这就是我遇到问题的地方。我现在的代码(如下)告诉我日期是否错误,但不会重新打开日期选择器以允许我设置新日期。我该怎么做呢?我尝试制作一种新方法,并在其中使用不同的 datepickerdialog 使用相同的代码,但这会将 2 个 datepicker 重叠在一起,并且选择的日期始终来自第二个。

    public void onClick(final View v) {
    final Calendar date =Calendar.getInstance();
    int dateyear=date.get(Calendar.YEAR);
    int datemonth=date.get(Calendar.MONTH);
    int dateday=date.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog dp=new DatePickerDialog(AddClaim.this, new OnDateSetListener() {                  
        public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
            int month = selectedmonth;
            date.set(selectedyear, month, selectedday);
            Date myDate = date.getTime();

            String returnDate = finalDate.format(myDate);
            if (call){
                sdate_field.setText(returnDate);
                try {
                    sdate = finalDate.parse(returnDate);
                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }else{
                try {
                    if (finalDate.parse(returnDate).before(sdate)){
                        Toast.makeText(AddClaim.this, "End date cannot be before Start date", Toast.LENGTH_LONG).show(); //after this a new datepickerdialog should open....


                    }else{
                        edate_field.setText(returnDate);
                    }
                } catch (ParseException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                try {
                    edate = finalDate.parse(returnDate);
                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    },dateyear, datemonth, dateday);
    if (call){
        dp.setTitle("Select Start Date");                
    }else{
        dp.setTitle("Select End Date");
    }
        dp.show(); 
    }
4

1 回答 1

1

创建一个布尔字段

boolean isValid;

onDateSet方法更新它。如果所选日期有效,则将其设置为true,否则将其设置为false

并检查布尔字段的状态并在必要时重新实例化选择器。

最重要的是,我建议您为选择器创建一个新类。

更新中...

public static class AppDatePickerDialog extends DialogFragment
            implements DatePickerDialog.OnDateSetListener {

    private int mYear, mMonth, mDay;
    private String sMonth;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new DatePickerDialog(getActivity(), this, mYear, mMonth, mDay);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //you logic to set the field to true or false
    }
}

因此,要打开选择器,您可以执行以下操作

AppDatePickerDialog datePicker = new AppDatePickerDialog();
datePicker.show(getSupportFragmentManager(), "YOUR_TAG");

如果要根据布尔字段重新打开选择器,可以将上述两行放在onDateSet方法中。

编辑

onDateSet方法中放入以下内容:

if (!isValid) {
    AppDatePickerDialog datePicker = new AppDatePickerDialog();
    datePicker.show(getSupportFragmentManager(), "YOUR_TAG");
}
于 2015-05-06T06:48:28.373 回答