-4

I have another class which showing calendar to user and setup date in textview. But how to get date (year from here? for calculate how old year user in general).

This is code which I'm using. This is: TextViewDatePicker editTextDatePicker = new TextViewDatePicker implement class which shows calendar for user and setup date in text view. I don't know ho to setup this date for this code: Calendar dateOfYourBirth = new GregorianCalendar();

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.profile_fragment);
    editTextForAge = (TextView)  findViewById(R.id.ed_calendar);
    Window window = this.getWindow();

      TextViewDatePicker editTextDatePicker = new TextViewDatePicker(ProfileGeneral.this, editTextForAge);

    Calendar dateOfYourBirth = new GregorianCalendar();

   Calendar today = Calendar.getInstance();
   int yourAge = today.get(Calendar.YEAR) - dateOfYourBirth.get(Calendar.YEAR);
   dateOfYourBirth.add(Calendar.YEAR, yourAge);
   if (today.before(dateOfYourBirth)) {
      yourAge--;
   }

And this is class which showing calendar for user:

public class TextViewDatePicker
    implements View.OnClickListener, DatePickerDialog.OnDateSetListener {
public static final String DATE_SERVER_PATTERN = "yyyy-MM-dd";
private DatePickerDialog mDatePickerDialog;
private TextView mView;
private Context mContext;
private long mMinDate;
private long mMaxDate;

public TextViewDatePicker(Context context, TextView view) {
    this(context, view, 0, 0);
}

public TextViewDatePicker(Context context, TextView view, long minDate, long maxDate) {
    mView = view;
    mView.setOnClickListener(this);
    mView.setFocusable(false);

    mContext = context;
    mMinDate = minDate;
    mMaxDate = maxDate;
}

@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, monthOfYear);
    calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    Date date = calendar.getTime();

    SimpleDateFormat formatter = new SimpleDateFormat(DATE_SERVER_PATTERN);
    mView.setText(formatter.format(date));
}

@Override
public void onClick(View v) {
    Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
    mDatePickerDialog = new DatePickerDialog(mContext, this, calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
    if (mMinDate != 0) {
        mDatePickerDialog.getDatePicker().setMinDate(mMinDate);
    }
    if (mMaxDate != 0) {
        mDatePickerDialog.getDatePicker().setMaxDate(mMaxDate);
    }
    mDatePickerDialog.show();
}
JimHawkins
  • 4,843
  • 8
  • 35
  • 55
Slavik
  • 33
  • 4
  • 1
    As an aside consider throwing away the long outmoded `Calendar` and `Date` classes, and adding [ThreeTenABP](https://github.com/JakeWharton/ThreeTenABP) to your Android project in order to use `java.time`, the modern Java date and time API. It is so much nicer to work with. – Ole V.V. Dec 29 '17 at 09:47

2 Answers2

1

This goes a lot easier with java.time, the modern Java date and time API.

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    // date picker month is 0-based, so add 1 to it
    LocalDate datePickerDate = LocalDate.of(year, monthOfYear + 1, dayOfMonth);
    mView.setText(datePickerDate.toString());

    LocalDate today = LocalDate.now(ZoneId.of("America/Tortola"));
    long yourAge = ChronoUnit.YEARS.between(datePickerDate, today);
}

Can you use this on Android? Certainly! For most Android devices you will need to get ThreeTenABP, the backport of java.time from Java 8 to Android Java 7. It is all well explained in this question: How to use ThreeTenABP in Android Project (that is ThreeTen for JSR-310, where java.time wsa first described, and ABP for Android Backport).

Please substitute your desired time zone if it doesn’t happen to be America/Tortola.

Ole V.V.
  • 81,772
  • 15
  • 137
  • 161
0

You used wrong constructor for TextViewDatePicker

Update code :

TextViewDatePicker editTextDatePicker = new TextViewDatePicker(ProfileGeneral.this, editTextForAge);

with

TextViewDatePicker editTextDatePicker = new TextViewDatePicker(ProfileGeneral.this, editTextForAge,0,0);
Rahul Giradkar
  • 1,818
  • 1
  • 17
  • 28