#javascript #android #android-studio
Вопрос:
Я хочу поместить дату выбора даты в редактируемый текст и продолжать обновлять этот редактируемый текст по мере того, как человек меняет дату. Кто-нибудь, помогите мне?
это мой код:
private View view;
private Button next;
private EditText birthday;
private DatePicker datePicker;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_birthday, container, false);
initWidgets();
int day = datePicker.getDayOfMonth();
int month = datePicker.getMonth();
int year = datePicker.getYear();
birthday.setText(day "/" month "/" year);
return view;
}
private void initWidgets() {
next = view.findViewById(R.id.bt5);
birthday = view.findViewById(R.id.kz5);
datePicker = view.findViewById(R.id.date_picker);
}
xml-код:
<DatePicker
android:id="@ id/date_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:layout_marginBottom="40dp"
android:layout_alignParentBottom="true"
android:calendarViewShown="false"/>
Ответ №1:
Вы можете добавить слушателя для прослушивания изменений в DatePicker, например:
datePicker.init(2021, 1, 1, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// use year month day here
}
});
Комментарии:
1. Хорошо, я сделал это, я пытался сделать
birthday.setText(year monthOfYear dayOfMonth);
, но потом приложение закрывается, можете ли вы сказать мне, почему?2. год, месяц и день являются целыми числами, их нужно преобразовать в строку, например «» год «/» месяц «,» день месяца
Ответ №2:
Во-первых, в вашем макете установите edittext как android:enabled="false"
или сделайте это программно как edtDate.setEnabled(false);
И установите событие щелчка, чтобы открыть средство выбора даты.
edtDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
edtDate.setText(String.format("d", dayOfMonth) "-" String.format("d", (monthOfYear 1)) "-" String.format("d", year));
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
});
Комментарии:
1. Можно ли это сделать, не открывая диалог? Потому что я перевел календарь в режим «вертушки» по xml
2. Да, определите прослушиватель для вашего datepicker, и вы получите обновленные данные в функции «onDateSet».
Ответ №3:
Попробуйте использовать приведенный ниже код без необходимости использования xml, это вам поможет.
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
button = findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog datePickerDialog = new DatePickerDialog(this, this, 2021, 1, 1);
datePickerDialog.show();
}
});
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Log.d("selectedDate","" year "-" month "-" dayOfMonth);
}
}