6

ich DialogFragment bin mit DatePicker zu zeigen, wenn Benutzer auf EditTextWie das gewählte Datum in EditText mit DialogFragment zeigen

tippt, wie ich das ausgewählte Datum in der gleichen EditText zeigen.

Ich verwende this als Referenz.

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

} 

Fragment:

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

Wenn ich auf EditText tippen, zeigt es DatePicker und ausgewählte Datum in einem Toast. Aber ich kann nicht herausfinden, wie man dieses Datum in der EditText zeigt?

+0

mit welchem ​​Problem Sie tatsächlich konfrontiert sind? – Amy

+0

Ich weiß nicht, wie man ausgewähltes Datum in EditText zeigt. – Oreo

Antwort

4

Basierend auf Ihrer Klassenstruktur, der beste Weg zu gehen, ist zu Erstellen Sie einen Konstruktor mit EditText als Parameter.

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

Dann übergeben Sie das editDate, wenn Sie eine Instanz der Dialogauswahlklasse erstellen.

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

Eine andere Lösung ist es, die DatePickerDialog.OnDateSetListener von DatePickerFragment und führt den Hörer in Sie Fragment zu entfernen.

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

Die neuere Version von Android SDK zwingt Sie, einen leeren, args-Konstruktor zu erhalten. Überprüfen Sie dieses Problem: http: // stackoverflow.com/questions/29762949/error-this-fragment-sollte-a-default-constructor-a-public-konstruktor – Oreo

+0

Ich habe dieses Problem schon einmal ausgeführt. Es ist wirklich nur eine Warnung. Wenn Sie das entfernen möchten, fügen Sie einfach einen anderen Konstruktor ohne ein Argument hinzu und rufen Sie super() auf; im Konstruktor. –

+0

Es ist nur ein Schutz für den Fall, dass Sie die Klasse in einem XML-Layout verwenden, wo sie den Standardkonstruktor verwenden, um eine Instanz Ihres Objekts zu erstellen, wenn der XML-Wert aufgebläht wird. Wir dürfen verschiedene Konstruktoren für unsere Klassen erstellen, solange wir wissen, was wir tun. –

0

Gerade diese ersetzen:

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

Linie oder diese Zeile geben Sie das Datum in Ihrem EditText zeigen:

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

aber ich benutze EditText in Fragment, und formatiertDate ist in DatePickerFragment.java – Oreo

1

Sie können etwas tun -

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

oder können Sie Kalender und DatePickerDialogFragment verwenden, um Zeit, so etwas zu zeigen und den entsprechenden Wert zu Ihrem Fragment zurück.

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

Hoffe es hilft !!

0

Fügen Sie die DatePickerFragment-Klasse in die MainFragment-Klasse ein. Sobald das öffentliche void onDateSet() aufgerufen wird, rufen Sie eine Methode in derselben Klasse auf, um das editText-Feld zu aktualisieren.

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

ich habe: – Oreo

+0

Versuchen Sie, das DatePickerFragment statische – Rakhi

+0

Else versuchen, Callback-Listener zu verwenden. Schreiben Sie DatePickerFragment als neue Klasse. – Rakhi