Android - 即使未调用日历弹出窗口也会打开

Android - Calendar pop up opens even when is not called

下面的代码用于在单击生日编辑文本时打开日历弹出窗口。它有效,问题是当我在点击生日编辑文本(例如国家/地区编辑文本)后单击另一个编辑文本时,日历弹出窗口再次打开。为什么会这样?

Java class:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit);

         prepareCalendar();
}

 public void prepareCalendar() {
        date = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateLabel();
            }
        };
        findViewById(R.id.birthday).setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                new DatePickerDialog(EditActivity.this, date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });
    }

    private void updateLabel() {
        String myFormat = "dd/MM/yyyy";
        SimpleDateFormat dateFormat = new SimpleDateFormat(myFormat, new Locale("pt", "BR"));
        birthday.setText(dateFormat.format(myCalendar.getTime()));
    }

XML:

<TextView
        android:id="@+id/birthdayLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/birthday"
        android:importantForAutofill="no"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"       
        android:inputType="date"
        android:focusable="true"/>

     <TextView
        android:id="@+id/countryLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/country"
        android:importantForAutofill="no"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="text"/>

发生这种情况是因为您已将其添加到 setOnFocusChangeListener 上,这为您提供了 booleanhasFocus.

您可以像这样简单地使用它来解决您的问题

findViewById(R.id.birthday).setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
             if(hasFocus){
                new DatePickerDialog(EditActivity.this, date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
         }
   });