Обновите дату в редактируемом тексте — Android Studio

#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);
}
}