2010-05-27 5 views
1

J'utilise actuellement un sélecteur de date et d'heure pour récupérer une date et une heure soumises par l'utilisateur, puis j'ai défini le texte d'un contrôle sur la date et l'heure sélectionnées.Solution élégante pour récupérer la date et l'heure personnalisées?

J'utilise le code suivant:

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())); 

maintenant, tandis que le bloc de code ci-dessus ne afficher la date et des widgets temps et définit le texte, le bloc de code est en cours d'exécution en plein avant que l'utilisateur peut sélectionnez la date .. c'est-à-dire: elle affiche d'abord la boîte de date, puis la case de temps par dessus, puis met à jour le texte, le tout sans intervention de l'utilisateur. Je voudrais que le widget de date attende pour exécuter le sélecteur de temps jusqu'à ce que la sélection de date soit terminée, et je voudrais que le settext ne s'exécute qu'après que le widget de temps soit terminé.

Comment est-ce possible? Ou est-ce qu'il y a une solution plus élégante qui m'échappe?

Edit: Voici le code pour DatePickerDialog/TimePickerDialog qui se trouve dans la classe:

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(); 
     } 
     }; 

Merci à l'avance

Répondre

2

lorsque DatePickerDialog Écouter ferme avec DatePickerDialog.OnDateSetListener. Quand onDateSet (...) est appelé, affichez la boîte de dialogue suivante (TimePickerDialog).

Edit: J'ai le code collé que vous avez demandés

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(); 
} 

}

+0

pensez-vous que vous pourriez donner un exemple de code? J'utilise actuellement les auditeurs ci-dessus dans ma classe, mais comment pourrais-je les adapter pour surveiller la fermeture du dialogue? – kefs

+0

merci encore .. je l'ai compris sur la base de votre première suggestion et avait le même code sur ma fin, mais mon settext ne mettait pas à jour (ou alors je pensais .. j'avais le textview mis à invisible) .. de toute façon .. c'est travaille maintenant. juste remarqué que vous n'avez pas réglé l'heure/minute actuelle sur le timedialog ..: p – kefs

Questions connexes