私は単に TextInputLayout 内の Edit テキストを onlick listen させようとしています。 動作しますが、トリガーするには EditText を 2 回クリックする必要があります。 理由がわかりません。 これが私のコードです:
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>
リスナー:
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();
}
});
}
ベストアンサー1
属性を設定するandroid:focusableInTouchMode
に間違い
android:focusableInTouchMode="false"
XML コード内edittext
。
ドキュメントからの説明android:focusableInTouchMode
は:
タッチ モード中にビューがフォーカスを取得できるかどうかを制御するブール値。ビューに対してこれが true の場合、そのビューはクリックされたときにフォーカスを取得でき、この属性が true に設定されていない別のビューがクリックされた場合でもフォーカスを維持できます。
そしてそれEditText
は真実デフォルトでは。
つまり、最初のクリックで がedittext
フォーカスを取得し、2 回目のクリックで がトリガーされますClickListener
。したがって、タッチでフォーカスを取得することを無効にする必要があります。