首次单击EditText Android Studio后出现片段对话框

时间:2015-08-12 05:10:47

标签: android android-fragments android-studio android-dialogfragment

我正在构建一个注册表单,并在fragment dialog字段聚焦后立即尝试显示EditText。目前,当它首次获得焦点时,它会显示键盘,然后再次点击它会调出Dialog。这个问题的主要目标是让Dialog在获得焦点时出现。如果你也可以帮助代码停止出现这个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");



}

1 个答案:

答案 0 :(得分:0)

现在您正在使用onClick()而不是必须使用setOnFocusChangeListener()此事件会在EditText获得焦点时尽快解除。

示例

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