Подтвердить что ты не робот

EditText внутри TextInputLayout onclick требует 2 щелчка?! Android

Я просто пытаюсь использовать onlick для редактирования текста внутри TextInputLayout. Он работает, но мне нужно дважды щелкнуть по EditText, чтобы он срабатывал. Я не понимаю, почему. Вот мой код:

XML:

  <android.support.design.widget.TextInputLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <EditText
            android:id="@+id/start_date"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Starting Date*: "
            android:inputType="textPersonName" />
    </android.support.design.widget.TextInputLayout>

Listenner:

   private void setListenners() {
        EditText startDate = (EditText) mView.findViewById(R.id.start_date);
        startDate.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
                Calendar mcurrentDate=Calendar.getInstance();
                int mYear = mcurrentDate.get(Calendar.YEAR);
                int mMonth = mcurrentDate.get(Calendar.MONTH);
                int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog mDatePicker=new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
                        Log.d("DEBUG", "year: " + year + " month: " + month + " day: " + day);
                    }
                },mYear, mMonth, mDay);
                mDatePicker.show();
            }
        });
    }
4b9b3361

Ответ 1

Установите для атрибута android:focusableInTouchMode значение false

android:focusableInTouchMode="false"

в вашем XML-коде edittext.


Пояснение, как из документов android:focusableInTouchMode:

Логическое значение, определяющее, может ли представление получить фокус в режиме касания. Если это верно для представления, то это представление может получить фокус при щелчке, и может сохранять фокус, если щелкнуло другое представление, для которого этот атрибут не установлен в значение true.

и EditText является истинным по умолчанию.

Другими словами: первый щелчок заставит edittext получить фокус, а второй щелчок вызовет ClickListener. Таким образом, вы должны отключить получение фокуса на ощупь.