2016-12-04 173 views
0

我有一個datepicker對話框,它放入一個edittext來設置生日..設置日期之後的對話框返回當前日期..我需要的是在選擇它之後顯示我選擇到datepicker對話框的日期嗎?如何從edittext android中設置Datepicker對話框中的日期?

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我稱之爲對話框打開日期選擇器:

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和日期選擇器不在同一個類中的代碼是什麼 –

相關問題