首次单击 EditText 后显示片段对话框 Android Studio

Getting a Fragment Dialog to appear after first click on EditText Android Studio

我正在构建一个注册表单,并试图让我的 fragment dialogEditText 字段被选中时立即出现。目前,当它第一次获得焦点时,它会显示键盘,然后再次点击时会弹出对话框。这个问题的主要目标是让对话框在获得焦点时出现。如果您还可以帮助编写代码以停止为此 EditText 出现键盘,那将是惊人的,我可能会把它留给另一个问题。

布局xml

<TextView
    android:id="@+id/tvRegDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/tvEmail"
    android:layout_marginTop="15dp"
    android:text="Registration Due:" />

<EditText
    android:id="@+id/etRegDate"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@id/tvRegDate"
    android:layout_toEndOf="@id/tvFirstName"
    android:ems="10"
    android:inputType="none"
    android:singleLine="true"
    android:layout_alignStart="@+id/etLastName"
    android:onClick="showDatePickerDialog"
    />

java代码

public static class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {

    }



}

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getFragmentManager(), "datePicker");



}

现在您正在使用 onClick() 而不是它,您必须使用 setOnFocusChangeListener() 此事件将在您 EditText 获得焦点时尽快触发。

例子

editText.setOnFocusChangeListener(
     new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
             if(!hasFocus){
                 // show dialog here
             }
        }
});