Reputation: 45
I have searched a lot and need to know the best way possible to select a date from a calendar, I am already trying a fragment such as
FragmentManager manager=getFragmentManager(); FragmentTransaction transaction=manager.beginTransaction();
DialogFragment fragment=new DatePickerDialogFragment(MainActivity.this); fragment.show(transaction, "date_dialog");
but have errors regarding imports , as they are conflicting i believe... really need a way out, does anyone have a good solution , please do let me know i need it!
Upvotes: 4
Views: 8755
Reputation: 14636
KOTLIN DATE PICKER WITH SELECTED DATE AS DEFAULT DATE
Initially add this code as a global scope, somewhere above or outside of onCreate()
//this will show default date as current date initially
private val currentDate: Calendar = Calendar.getInstance()
private var year = currentDate[Calendar.YEAR]
private var month = currentDate[Calendar.MONTH]
private var day = currentDate[Calendar.DAY_OF_MONTH]
on your TextView, add this OnClickListener:
binding.tvDate.setOnClickListener {
selectDate()
}
Here is your selectDate() Function:
private fun selectDate() {
val mDatePicker = DatePickerDialog(
this,
{ _, selectedYear, selectedMonth, selectedDay ->
val myFormat = AppConstants.DateFormat.DF_dd_MM_yy
val sdf = SimpleDateFormat(myFormat, Locale.getDefault())
day = selectedDay
month = selectedMonth
year = selectedYear
currentDate.set(year, month, day)
binding.tvDate.text = sdf.format(currentDate.time)
}, year, month, day
)
mDatePicker.show()
mDatePicker.getButton(AlertDialog.BUTTON_POSITIVE)
.setTextColor(ContextCompat.getColor(this, R.color.purple))
mDatePicker.getButton(AlertDialog.BUTTON_NEGATIVE)
.setTextColor(ContextCompat.getColor(this, R.color.purple))
}
Here. DF_dd_MM_yyyy
is const val DF_dd_MM_yyyy = "dd/MM/yyyy"
Upvotes: 0
Reputation: 3373
I like to do this with Dialog.
First of all, set android:focusable="false"
on your EditText
in your xml.
Then you can try something like this:
yourEditText = (EditText) findViewById(R.id.yourEditTextID);
yourEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// To show current date in the datepicker
Calendar mcurrentDate = Calendar.getInstance();
mYear = mcurrentDate.get(Calendar.YEAR);
mMonth = mcurrentDate.get(Calendar.MONTH);
mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);
DatePickerDialog mDatePicker = new DatePickerDialog(yourActivity.this, new OnDateSetListener() {
public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
Calendar myCalendar = Calendar.getInstance();
myCalendar.set(Calendar.YEAR, selectedyear);
myCalendar.set(Calendar.MONTH, selectedmonth);
myCalendar.set(Calendar.DAY_OF_MONTH, selectedday);
String myFormat = "dd/MM/yy"; //Change as you need
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.FRANCE);
yourEditText.setText(sdf.format(myCalendar.getTime()));
mDay = selectedday;
mMonth = selectedmonth;
mYear = selectedyear;
}
}, mYear, mMonth, mDay);
//mDatePicker.setTitle("Select date");
mDatePicker.show();
}
});
Where mYear,mMonth and mDay are global int.
Upvotes: 4
Reputation: 4124
You can try something like this
DatePicker mDlgDatePicker = new DatePickerDialog(getActivity(), new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mEdtxDate.setText(year + "-" + (monthOfYear + 1 < 10 ? "0" : "") + (monthOfYear + 1) + "-"
+ (dayOfMonth < 10 ? "0" : "") + dayOfMonth);
}
}, 2014, 1, 1);
mDlgDatePicker.show();
Upvotes: 1