Элегантное решение для получения пользовательских даты и времени? - PullRequest
1 голос
/ 27 мая 2010

В настоящее время я использую средство выбора даты и времени, чтобы получить отправленные пользователем дату и время, а затем я установил в тексте элемента управления выбранные дату и время.

Я использую следующий код:

new DatePickerDialog(newlog3.this, d, calDT.get(Calendar.YEAR), calDT.get(Calendar.MONTH), calDT.get(Calendar.DAY_OF_MONTH)).show();

new TimePickerDialog(newlog3.this, t, calDT.get(Calendar.HOUR_OF_DAY), calDT.get(Calendar.MINUTE), true).show();

optCustom.setText(fmtDT.format(calDT.getTime())); 

Теперь, когда вышеуказанный блок кода вызывает виджеты даты и времени и устанавливает текст, блок кода выполняется полностью, прежде чем пользователь сможет выбрать дату. Т.е. сначала он вызывает поле даты, затем время, а затем обновляет текст, все без какого-либо взаимодействия с пользователем. Я хотел бы, чтобы виджет даты ждал выполнения селектора времени, пока выбор даты не будет сделан, и я хотел бы, чтобы settext выполнялся только после того, как виджет времени будет сделан.

Как это возможно? Или есть более элегантное решение, которое ускользает от меня?

Редактировать: это код для DatePickerDialog / TimePickerDialog, который находится в классе:

 DatePickerDialog.OnDateSetListener d=new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, int monthOfYear, 
                    int dayOfMonth) { 
            calDT.set(Calendar.YEAR, year); 
            calDT.set(Calendar.MONTH, monthOfYear); 
            calDT.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
          //updateLabel(); 
        } 
      };   
 TimePickerDialog.OnTimeSetListener t=new TimePickerDialog.OnTimeSetListener() { 
        public void onTimeSet(TimePicker view, int hourOfDay, 
                             int minute) { 
            calDT.set(Calendar.HOUR_OF_DAY, hourOfDay); 
            calDT.set(Calendar.MINUTE, minute); 
          //updateLabel(); 
        } 
      };  

Заранее спасибо

1 Ответ

2 голосов
/ 27 мая 2010

Прослушивание, когда DatePickerDialog закрывается с DatePickerDialog.OnDateSetListener . Когда вызывается onDateSet (...), показывать следующий диалог (TimePickerDialog).

Редактировать: я вставил код, который вы спросили

public class YourActivity extends Activity {    

private final Calendar selectedDate = Calendar.getInstance();

final DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, int monthOfYear,  int dayOfMonth) { 
            selectedDate.set(Calendar.YEAR, year);
            selectedDate.set(Calendar.MONTH, monthOfYear);
            selectedDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            new TimePickerDialog(YourActivity.this, timeListener, 0, 0, true).show();
        } 
      };   

final TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() { 
        public void onTimeSet(TimePicker view, int hourOfDay,  int minute) { 
            selectedDate.set(Calendar.HOUR_OF_DAY, hourOfDay);
            selectedDate.set(Calendar.MINUTE, minute);              
            // push flow to the next step
        } 
      }; 

public void startTimeWizard() {
    final Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());       
    new DatePickerDialog(this, dateListener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();    
}

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...