6

Sto usando DialogFragment per mostrare DatePicker quando l'utente tocca il EditTextCome Show Selected data data EditText utilizzando DialogFragment

Come posso mostrare la data selezionata nella stessa EditText.

Sto usando this come riferimento.

DatePickerFragment.java:

public class DatePickerFragment extends DialogFragment 
     implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     Calendar c = Calendar.getInstance(); 
     c.set(year, monthOfYear, dayOfMonth); 

     SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy"); 
     String formattedDate = sdf.format(c.getTime()); 
     Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show(); 
    } 

} 

Frammento:

editDate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       android.support.v4.app.DialogFragment dialogFragment = new DatePickerFragment(); 
       dialogFragment.show(getFragmentManager(), "datePicker"); 
      } 
     }); 

Quando si tocca l'EditText, mostra DatePicker e quella selezionata in un Toast. Ma non riesco a capire come mostrare quella data nel EditText?

+0

quale problema si sta affrontando in realtà? – Amy

+0

non so come mostrare la data selezionata in EditText .. – Oreo

risposta

4

Sulla base della sua struttura di classe, il modo migliore per andare è quello di crea un costruttore con EditText come parametro.

private EditText mEditText; 
... 
public DatePickerFragment(EditText editText) 
{ 
    mEditText = editText; 
} 

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
{ 
    Calendar c = Calendar.getInstance(); 
    c.set(year, monthOfYear, dayOfMonth); 

    SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy"); 
    String formattedDate = sdf.format(c.getTime()); 
    Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show(); 

    mEditText.setText(formattedDate); 
} 

Quindi passare la modificaData quando si crea un'istanza della classe di selezione finestra di dialogo.

public void onClick(View v) 
{ 
    android.support.v4.app.DialogFragment dialogFragment = new DatePickerFragment(editDate); 
dialogFragment.show(getFragmentManager(), "datePicker"); 
} 

Un'altra soluzione è quella di rimuovere il DatePickerDialog.OnDateSetListener da DatePickerFragment e implementare l'ascoltatore in voi frammento.

public class OtherFragment extends Fragment 
     implements DatePickerDialog.OnDateSetListener 
{ 
    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     Calendar c = Calendar.getInstance(); 
     c.set(year, monthOfYear, dayOfMonth); 

     SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy"); 
     String formattedDate = sdf.format(c.getTime()); 
     Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show(); 
     editDate.setText(formattedDate); 
    } 
} 
+0

La versione più recente di Android SDK ti costringe a ottenere un costruttore vuoto, senza argomenti. Controllare questo problema: http: // StackOverflow.it/questions/29762949/error-this-fragment-should-provide-a-default-constructor-a-public-constructor – Oreo

+0

Ho già eseguito questo problema. In realtà è solo un avvertimento. Se vuoi rimuoverlo aggiungi solo un altro costruttore senza argomento e chiama super(); all'interno del costruttore. –

+0

È solo una protezione nel caso in cui si utilizzerà la classe in un layout XML in cui verrà utilizzato il costruttore predefinito per creare un'istanza del proprio oggetto quando viene gonfiato il codice XML. Siamo autorizzati a creare diversi costruttori per le nostre classi, purché sappiamo cosa stiamo facendo. –

0

Basta sostituire questo:

Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show(); 

linea oppure inserire questa riga per visualizzare la data nella vostra EditText:

EditText date=(EditText)find(...); 
date.setText(formattedDate); 
+0

ma sto usando EditText in Fragment e formattedDate è in DatePickerFragment.java – Oreo

1

si può fare qualcosa di simile -

EditText edttxt_date = (EditText) findViewById(R.id.date); 
edttxt_date.setText(formattedDate); 
Toast.makeText(getBaseContext(), formattedDate, Toast.LENGTH_SHORT).show(); 

o è possibile utilizzare Calender e DatePickerDialogFragment troppo per visualizzare l'ora qualcosa di simile e restituire il valore corrispondente al frammento.

DateFormat dateFormat = DateFormat.getDateInstance(); 
edttxt_date.setText(dateFormat.format(cal.getTime())); 

Spero che aiuti !!

0

Aggiungere la classe DatePickerFragment nella classe MainFragment. Una volta chiamato il void pubblico suDateSet(), richiamare un metodo nella stessa classe per aggiornare il campo editText.

public MainFragment extents Fragment{ 

     ..... 
     updateDateField(String formattedDate){ 
       editDate.setText(formattedDate); 
     } 

     public class DatePickerFragment extends DialogFragment 
        implements DatePickerDialog.OnDateSetListener { 
.... 
      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       Calendar c = Calendar.getInstance(); 
       c.set(year, monthOfYear, dayOfMonth); 

       SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy"); 
           String formattedDate = sdf.format(c.getTime()); 
           updateDateField(formattedDate); 
      } 
     } 
    } 
+0

ho provato a modo tuo, ma ottenendo: Errore: (121) Errore: Questo frammento di classe interna deve essere statico (MainFragment.DatePickerFragment) [ValidFragment] – Oreo

+0

Prova a rendere statico DatePickerFragment – Rakhi

+0

Else prova ad usare Listener di callback. Scrivi DatePickerFragment come nuova classe. – Rakhi