首次单击 EditText 后显示片段对话框 Android Studio
Getting a Fragment Dialog to appear after first click on EditText Android Studio
我正在构建一个注册表单,并试图让我的 fragment dialog
在 EditText
字段被选中时立即出现。目前,当它第一次获得焦点时,它会显示键盘,然后再次点击时会弹出对话框。这个问题的主要目标是让对话框在获得焦点时出现。如果您还可以帮助编写代码以停止为此 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
}
}
});
我正在构建一个注册表单,并试图让我的 fragment dialog
在 EditText
字段被选中时立即出现。目前,当它第一次获得焦点时,它会显示键盘,然后再次点击时会弹出对话框。这个问题的主要目标是让对话框在获得焦点时出现。如果您还可以帮助编写代码以停止为此 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
}
}
});