2016-12-04 2 views
0

У меня есть диалог datepicker, который помещает edittext для установки дня рождения. Диалог после установки даты возвращает текущую дату .. мне нужно отобразить дату, которую я выбрал, в диалоговом окне datepicker после выбора?Как установить дату в диалоговом окне Datepicker от edittext android?

Datepicker диалог Класс:

public class DatePickerDialog2 extends DialogFragment{ 

public static final String ARG_DEFAULT = "default"; 

private DatePicker datePicker; 
private String defaultDate; 

    private DatePickerDialog.OnDateSetListener onDateListener; 
public DatePickerDialog2() { 
    try { 
     OnDatePickerDoneButtonClickedListener act = (OnDatePickerDoneButtonClickedListener) getActivity(); 

    } catch (ClassCastException e) { 
     throw new ClassCastException("Must implement OnDatePickerDoneButtonClickedListener"); 
    } 
} 


    public interface OnDatePickerDoneButtonClickedListener { 
    void OnDatePickerDoneButtonClicked(String date); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    defaultDate = getArguments().getString(ARG_DEFAULT); 

} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Calendar calendar = Calendar.getInstance(); 
    if (TextUtils.isEmpty(defaultDate)) { 
     DateFormat df = new SimpleDateFormat("dd/MMM/yyyy");; 
     try { 
      calendar.setTime(df.parse(new Date().toString())); 
      Log.d("first", defaultDate + " -"); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

    } else { 
     try { 
      DateFormat df = new SimpleDateFormat("dd/MMM/yyyy"); 
      calendar.setTime(df.parse(defaultDate)); 
      Log.d("second", defaultDate + " -"); 
     } catch (ParseException e1) { 
      Log.d("third",defaultDate+" -"); 
     } 
    } 
    datePicker = new DatePicker(getActivity()); 

    datePicker.setCalendarViewShown(false); 
    datePicker.setMaxDate(new Date().getTime()-1 * 24 * 3600 * 1000); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 

//   String date =datePicker.getYear()+ "-"+ datePicker.getDayOfMonth() + "-" + (datePicker.getMonth() + 1) ; 
      int day = datePicker.getDayOfMonth(); 
      int month = datePicker.getMonth(); 
      int year = datePicker.getYear(); 

     final Calendar calendar = Calendar.getInstance(); 
      calendar.set(year, month, day); 
      SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy"); 
      String date = sdf.format(calendar.getTime()); 
      OnDatePickerDoneButtonClickedListener act = (OnDatePickerDoneButtonClickedListener) getActivity(); 
      act.OnDatePickerDoneButtonClicked(date); 
      dismiss(); 
     } 
    }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dismiss(); 
       } 
      }) 
        //.setTitle("Select date") 
      .setView(datePicker); 
    // Create the AlertDialog object and return it 
    return builder.create(); 

} 
} 

edittext, который я вызвать диалог, чтобы открыть DatePicker:

birthday.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            DatePickerDialog2 dialog = new DatePickerDialog2(); 
            Bundle bundle = new Bundle(); 
            bundle.putString("dateAsText", birthday.getText().toString()); 
            dialog.setArguments(bundle); 
            dialog.show(getSupportFragmentManager(), "date_picker_frag"); 
           } 
          }); 

ответ

0

первые орудия DatePickerDialog.OnDateSetListener в классе DatePickerDialog2 затем переопределить onDateSet метод в DatePickerDialog2 класс

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
    String selDate = year + "-" + String.format("%02d", (monthOfYear+1)) + "-" + String.format("%02d", dayOfMonth); 
    Intent i = new Intent(); 
    i.putExtra("selectedDate",selDate); 
    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i); 
} 

затем в классе деятельности

mEtDate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DialogFragment picker = new DatePickerFragment(); 
      picker.setTargetFragment(OverviewFragment.this, ID_DATEPICKER_FRAGMENT); 
      picker.show(getFragmentManager().beginTransaction(), "datePicker"); 
     } 
    }); 

затем переопределить метод onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if((resultCode == Activity.RESULT_OK)){ 
     Bundle bundle=data.getExtras(); 
     String resultDate = bundle.getString("selectedDate",""); 
     mEtDate.setText(resultDate); 
    } 
} 
+0

, и он говорит мне не может разрешить код, который вы пишете в EditText ? –

+0

нет класса активности? – sajan

+0

что такое код внутри прослушивателя кликов –

0

Попробуйте

private Calendar cal; 
private int day; 
private int month; 
private int year; 
EditText et; 

cal = Calendar.getInstance(); 
day = cal.get(Calendar.DAY_OF_MONTH); 
month = cal.get(Calendar.MONTH); 
year = cal.get(Calendar.YEAR); 
et = (EditText) findViewById(R.id.editText); 
et.setInputType(0); 
et.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View arg0) { 
    hideSoftKeyboard(RegisterActivity.this); 
    android.support.v4.app.DialogFragment newFragment = new SelectDateFragment(); 
    newFragment.show(getSupportFragmentManager(), "DatePicker"); 

} 
}); 

public static class SelectDateFragment extends android.support.v4.app.DialogFragment implements DatePickerDialog.OnDateSetListener { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar calendar = Calendar.getInstance(); 
    int yy = calendar.get(Calendar.YEAR); 
    int mm = calendar.get(Calendar.MONTH); 
    int dd = calendar.get(Calendar.DAY_OF_MONTH); 
    return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
} 

public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
    populateSetDate(yy, mm + 1, dd); 
} 

public String populateSetDate(int year, int month, int day) { 
    et.setText(month + "/" + day + "/" + year); 
    return (month + "/" + day + "/" + year); 
} 

} 
+0

clicklistener и datepicker не находятся в одном классе –

Смежные вопросы