J'essaie simplement d'avoir un onlick écouter sur un texte Edit dans un TextInputLayout. Cela fonctionne, mais je dois cliquer deux fois sur EditText pour qu'il se déclenche, je ne comprends pas pourquoi. Voici mon code:
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>
Auditeur:
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();
}
});
}
Définissez l'attribut Android:focusableInTouchMode
à false
Android:focusableInTouchMode="false"
dans votre edittext
code xml.
Explication, à partir des documents, Android:focusableInTouchMode
est:
Booléen qui contrôle si une vue peut prendre le focus en mode tactile. Si cela est vrai pour une vue, cette vue peut gagner le focus lorsque vous cliquez dessus et peut garder le focus si une autre vue est cliquée sur laquelle cet attribut n'a pas la valeur true.
et le EditText
est vrai par défaut.
En d'autres termes: le premier clic fera que le edittext
gagnera en focus et le second clic est celui qui déclenche le ClickListener
. Vous devez donc désactiver la focalisation sur le toucher.