在 Android 的開發上,讓使用者選擇日期是一件很常做的事期, Android 內其實內建日期選擇工具 DatePickerDialog ,只要透過這個對話框,就可以讓使用者快速設定日期,如果你是 Android 的開發者,那麼這個工具一定不可以錯過。
假設,我們有一個 Android 的 EditText ,當我們按下這個 EditText 時,就希望跳出日期選擇工具,讓使用者設定日期,該怎麼做呢?首先,我們當然要刻 EditText 啦,如下的範例。
<EditText android:id="@+id/edit_birthday" android:layout_width="fill_parent" android:layout_height="fill_parent" android:inputType="date" android:singleLine="true" />
接下來,就得在程式碼中加入 EditText 的監聽事件,範例如下:
private EditText etBirthday = null; etBirthday = (EditText) findViewById(R.id.edit_birthday); etBirthday.setOnClickListener(this);
在 EditText 點下去之後,要出現 DatePickerDialog 讓使用者選擇日期,所以我們先調用 DatePickerDialog 的對話框
DatePickerDialog dialog = new DatePickerDialog(SubmitBirthdayActivity.this, datepicker, m_Calendar.get(Calendar.YEAR), m_Calendar.get(Calendar.MONTH), m_Calendar.get(Calendar.DAY_OF_MONTH)); dialog.show();
其中, datepicker 為 DatePickerDialog 的 Callback,因為我們是要讓使用者設定日期時,再於 EditText 來顯示日期,所以只要實做 OnDateSetListener 這個 Listener 就可以了。
DatePickerDialog.OnDateSetListener datepicker = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { m_Calendar.set(Calendar.YEAR, year); m_Calendar.set(Calendar.MONTH, monthOfYear); m_Calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); String myFormat = "yyyy/MM/dd"; SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.TAIWAN); etBirthday.setText(sdf.format(m_Calendar.getTime())); } };
整體 JAVA 程式碼如可以拚湊如下,至於內容依個人實做需求和 XML 檔設計來做調整。
public class SubmitBirthdayActivity extends Activity implements OnClickListener { private Calendar m_Calendar = Calendar.getInstance(); private EditText etBirthday = null; protected void onResume() { etBirthday = (EditText) findViewById(R.id.edit_birthday); etBirthday.setOnClickListener(this); } DatePickerDialog.OnDateSetListener datepicker = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { m_Calendar.set(Calendar.YEAR, year); m_Calendar.set(Calendar.MONTH, monthOfYear); m_Calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); String myFormat = "yyyy/MM/dd"; //In which you need put here SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.TAIWAN); etBirthday.setText(sdf.format(m_Calendar.getTime())); } }; @Override public void onClick(View v) { if (v.getId() == etBirthday.getId()) { DatePickerDialog dialog = new DatePickerDialog(SubmitBirthdayActivity.this, datepicker, m_Calendar.get(Calendar.YEAR), m_Calendar.get(Calendar.MONTH), m_Calendar.get(Calendar.DAY_OF_MONTH)); dialog.show(); } } }
code is : DatePickerDialog dialog = new DatePickerDialog(this, datepicker,year,month,day);
But I got error : The constructor DatePickerDialog(ReportFragment, DatePickerDialog.OnDateSetListener, int, int, int) is undefined
How to correct it ?