Multiple datepicker for Edittext in same activity
Declare a variable at the class level:
EditText clickedEditText;
and inside the click listeners set it to the clicked EditText:
doa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clickedEditText = (EditText) view;
new DatePickerDialog(FamilyEditActivity.this, date, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
spoucedob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clickedEditText = (EditText) view;
new DatePickerDialog(FamilyEditActivity.this, date, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
Now you only need 1 method update()
:
private void update() {
String myFormat = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
clickedEditText.setText(sdf.format(myCalendar.getTime()));
}
and in onDateSet()
:
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
update();
}
};
Multiple DatePickers in same activity
You need to make 2 separate DatePicker Dialogs
Make 2 Listeners
int from_year, from_month, from_day,to_year, to_month, to_day; //initialize them to current date in onStart()/onCreate()
DatePickerDialog.OnDateSetListener from_dateListener,to_dateListener;
Implement them...
from_dateListener = new OnDateSetListener(){
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
...
}
}
};
to_dateListener = new OnDateSetListener(){
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
.....
}
};
Create Seperate Dialogs for both of them
int DATE_PICKER_TO = 0;
int DATE_PICKER_FROM = 1;
@Override
protected Dialog onCreateDialog(int id) {
switch(id){
case DATE_PICKER_FROM:
return new DatePickerDialog(this, from_dateListener, from_year, from_month, from_day);
case DATE_PICKER_TO:
return new DatePickerDialog(this, to_dateListener, to_year, to_month, to_day);
}
return null;
}
Two date pickers in same activity android
It can be done like that:
View.OnClickListener showDatePicker = new View.OnClickListener() {
@Override
public void onClick(View v) {
final View vv = v;
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (vv.getId() == R.id.StartDate //id of your StartDate button) {
//do the stuff
} else //EndDate button was clicked {
//do the stuff
}
}
}, year, month, day);
datePickerDialog.show();
}
};
startDate.setOnClickListener(showDatePicker);
endDate.setOnClickListener(showDatePicker);
The main idea here is to store the View
fired OnClickEvent
(in your case buttons) and compare ID of that view with IDs of your buttons
Two DatePicker in the same Activity - Android
You will probably be better off not having the DatePickerDialogFragment
implement the listener (I know that's in the Android examples, but it's an inflexible design as you've noticed). If you add a setListener
method to the DatePickerDialogFragment
like this:
public class DatePickerDialogFragment extends DialogFragment {
private DatePickerDialog.OnDateSetListener listener = null;
void setListener(DatePickerDialog.OnDateSetListener listener) {
this.listener = listener;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), listener, year, month, dayOfMonth);
}
}
then it's easy to use with different date pickers, easy to reuse throughout your app, and straightforward to put the result into some other view in the Activity that launches the picker, like this (the example code below would go in your Activity onCreate
method)
final DatePickerDialog.OnDateSetListener startListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String dateString = DateFormat.getDateInstance().format(calendar.getTime());
// set the start date TextView
startDatePicker.setText(dateString);
}
};
final DatePickerDialog.OnDateSetListener endListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String dateString = DateFormat.getDateInstance().format(calendar.getTime());
// set the enddate TextView
endDatePicker.setText(dateString);
}
};
// NOTE: Use getSupportFragmentManager or getFragmentManager below
// depending on which type of DialogFragment you extended
// Reset the listener if the screen was rotated
if (savedInstanceState != null) {
DatePickerDialogFragment dpf;
dpf = (DatePickerDialogFragment) getSupportFragmentManager().findFragmentByTag("myStartDatePicker");
if (dpf != null) {
dpf.setListener(startListener);
}
dpf = (DatePickerDialogFragment) getSupportFragmentManager().findFragmentByTag("myEndDatePicker");
if (dpf != null) {
dpf.setListener(endListener);
}
}
startDatePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialogFragment dpf = new DatePickerDialogFragment();
// set bundle args on dpf if still needed
dpf.setListener(startListener);
dpf.show(getSupportFragmentManager(), "myStartDatePicker");
}
});
endDatePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialogFragment dpf = new DatePickerDialogFragment();
// set bundle args on dpf if still needed
dpf.setListener(endListener);
dpf.show(getSupportFragmentManager(), "myEndDatePicker");
}
});
How to achieve multiple datepicker functionality with two buttons and save those dates that are picked?
I have created DatePickerFragment
helper class, With this you can select any number of date with just single DatePickerFragment class.
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
/**
* The callback interface used to indicate the user is done filling in the date (they clicked on the 'Set' button).
*/
public interface OnDateSetListener {
/**
* @param dialog The view associated with this listener.
* @param year The year that was set.
* @param monthOfYear The monthOfYear that was set.
* @param dayOfMonth The dayOfMonth that was set.
*/
void onDateSet(DatePicker dialog, int year, int monthOfYear, int dayOfMonth, int reqCode);
}
private OnDateSetListener mListener;
private int reqCode;
public void setOnDateSetListener(OnDateSetListener mListener, int reqCode){
this.mListener = mListener;
this.reqCode = reqCode;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int year;
int month;
int day;
final Calendar c = Calendar.getInstance();
Bundle bundle = this.getArguments();
if(bundle!=null) {
// Use the given date as the default date in the picker
year = bundle.getInt("YEAR");
month = bundle.getInt("MONTH");
day = bundle.getInt("DAY");
}else{
// Use the current date as the default date in the picker
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
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) {
if(mListener!=null)
mListener.onDateSet(view, year, monthOfYear, dayOfMonth, reqCode);
this.dismiss();
}
}
Use it in Activity or Fragment
public class MainActivity extends FragmentActivity implements DatePickerFragment.OnDateSetListener {
private static final int FROM_DATE_TAG = 2404;
private static final int TO_DATE_TAG = 2405;
@Override
public void onClick(View view) {
FragmentManager fragmentManager = getSupportFragmentManager();
DatePickerFragment fragment;
switch(view.getId()){
case R.id.fromDate:
fragment = new DatePickerFragment();
fragment.setOnDateSetListener(this, FROM_DATE_TAG);
fragment.show(fragmentManager, "Date Picker");
break;
case R.id.toDate:
fragment = new DatePickerFragment();
fragment.setOnDateSetListener(this, TO_DATE_TAG);
fragment.show(fragmentManager, "Date Picker");
break;
}
}
//If you want to update the alredy selected date, Specify it in budle. DatePickerFragment will take specified bundle date as default date.
private void updateDate() {
//get to date stored in SharedPrefrence
String toDate = SharedPrefrenceUtils.getString(mContext, "FROM_DATE");
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault());
Date parse = sdf.parse(toDate);
Calendar c = Calendar.getInstance();
c.setTime(parse);
FragmentManager fragmentManager = this.getActivity().getSupportFragmentManager();
DatePickerFragment fragment = new DatePickerFragment();
Bundle bundle = new Bundle();
bundle.putInt("YEAR", c.get(Calendar.YEAR));
bundle.putInt("MONTH", c.get(Calendar.MONTH));
bundle.putInt("DAY", c.get(Calendar.DATE));
fragment.setArguments(bundle);
fragment.setOnDateSetListener(this, FROM_DATE_TAG);
fragment.show(fragmentManager, "Date Picker");
}
@Override
public void onDateSet(DatePicker dialog, int year, int monthOfYear, int dayOfMonth, int reqCode) {
if(reqCode == FROM_DATE_TAG){
Calendar myCalendar = Calendar.getInstance();
myCalendar.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault());
String dateString = formatter.format(myCalendar.getTime());
Log.i("From Date","DATE:"+dateString);//"Result = DATE:May 24, 2015"
//Store FROM_DATE in SharedPrefrence
SharedPrefrenceUtils.putString(mContext,"FROM_DATE", dateString);
} else if(reqCode == TO_DATE_TAG){
Calendar myCalendar = Calendar.getInstance();
myCalendar.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault());
String dateString = formatter.format(myCalendar.getTime());
Log.i("To Date","DATE:"+dateString);//"Result = DATE:May 25, 2015"
//Store TO_DATE in SharedPrefrence
SharedPrefrenceUtils.putString(mContext,"TO_DATE", dateString);
}
}
}
Refer How to display SharedPreference stored data in Fragment? for SharedPrefrenceUtils
Class.
Related Topics
Clear Recent Apps Wipe the Apps Memory and My Receiver Stopped Working
How to Monitor Sim State Change
How to Display More Than 3- Levels of Expandable List View
Set Width to Match Constraints in Constraintlayout
Android, How to Create Option Menu
Sharedpreferences and Thread Safety
Run Lint When Building Android Studio Projects
How to Make Drawerlayout to Display Below the Toolbar
Event Onclick for a Button in a Custom Notification
Javadoc in Eclipse Failing to Recognize Packages
How to Get Profile Like Gender from Google Signin in Android
How to Read CPU Frequency on Android Device
Memory Analyzer Tool in Android
Android: Failed to Allocate Memory
Adb Got Two Same Serial Numbers When Connected to Two Smart Phones
Listen to Own Application Uninstall Event on Android