Multiple Datepickers in Same Activity

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



Leave a reply



Submit