Мне нужна помощь
В основном у меня есть EditTexts в моем приложении, где пользователь может ввести дату,
И я использую текстовый наблюдатель для принудительного использования формата ДД / ММ / ГГГГ ,
Он также автоматически устанавливает текстовое представление как текущую дату,
Проблема возникает, когда, скажем, дата 20/10/2019, и я хочу изменить только день или месяц (20 и 10), так что происходит, когда я выбираю 10 (или в основном где-нибудь в тексте) и пытаюсь стереть скачки дробилки до конца строки и начинает стирать с года
вот код для текстового наблюдателя
TextWatcher DateWatcher=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@SuppressLint("DefaultLocale")
@TargetApi(Build.VERSION_CODES.N)
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@TargetApi(Build.VERSION_CODES.N)
@SuppressLint("DefaultLocale")
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().equals(current)) {
String clean=s.toString().replaceAll("[^\\d.]|\\.", "");
String cleanC=current.replaceAll("[^\\d.]|\\.", "");
int cl=clean.length();
int sel=cl;
for (int i=2; i <= cl && i < 6; i+=2) {
sel++;
}
if (clean.equals(cleanC)) sel--;
if (clean.length() < 8) {
clean=clean + ddmmyyyy.substring(clean.length());
} else {
int day=Integer.parseInt(clean.substring(0, 2));
int mon=Integer.parseInt(clean.substring(2, 4));
int year=Integer.parseInt(clean.substring(4, 8));
mon=mon < 1 ? 1 : mon > 12 ? 12 : mon;
cal.set(Calendar.MONTH, mon - 1);
year=(year < 1900) ? 1900 : (year > 2100) ? 2100 : year;
cal.set(Calendar.YEAR, year);
day=(day > cal.getActualMaximum(Calendar.DATE)) ? cal.getActualMaximum(Calendar.DATE) : day;
clean=String.format("%02d%02d%02d", day, mon, year);
}
clean=String.format("%s/%s/%s", clean.substring(0, 2),
clean.substring(2, 4),
clean.substring(4, 8));
sel=sel < 0 ? 0 : sel;
current=clean;
startdate.setText(current);
startdate.setSelection(sel < current.length() ? sel : current.length());
}
}
private String current="";
private String ddmmyyyy="DDMMYYYY";
private Calendar cal=Calendar.getInstance();
};