DatePickerDialog открывается два раза

Я хочу показать свою дату в Edit-Text в следующем формате: ГГГГ-ММ-ДД.
Во-первых, когда я касаюсь Edit-Text даты, клавиатура все еще открыта, а диалоговое окно выбора даты появляется два раза. Если я установлю это один раз, снова появится диалоговое окно выбора. Когда я устанавливаю дату во второй раз, то дата устанавливается в Edit-Text.
Первый фрагмент прикреплен к первому действию, а второй — ко второму действию.

Код второго фрагмента:

package com.example.week9_fragment_task;

import android.app.DatePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.Calendar;


public class SecondFragment extends Fragment
{
    private Button btnadd,btncancel;
    private Spinner spinner;
    private EditText date;
    Calendar calendar=Calendar.getInstance();
    DBTools dbTools;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_second, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        btnadd=(Button)getActivity().findViewById(R.id.btn_add_fragment2);
        btncancel=(Button)getActivity().findViewById(R.id.btn_cancel_fragment2);
        spinner=(Spinner)getActivity().findViewById(R.id.spinner);
        date=(EditText)getActivity().findViewById(R.id.datepicker);

        ArrayAdapter adapter=ArrayAdapter.createFromResource(getActivity(),R.array.health_type,android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        date.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Date_Alert(v);
                return false;
            }

            private void Date_Alert(View v)
            {

                DatePickerDialog datePickerDialog=new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {

                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth)
                    {
                        date.setText(year+"-"+month+"-"+dayOfMonth);
                    }

                    },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH));
                datePickerDialog.show();
            }
        });

XML-код второго фрагмента

<?xml version = "1.0" encoding = "utf-8"?>
<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:layout_gravity = "center"
    tools:context = ".SecondFragment">
    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:gravity = "center_horizontal"
        android:orientation = "vertical">

        <EditText
            android:id = "@+id/txtname"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:text = ""
            android:hint = "@string/Hint_Name"
            android:inputType = ""
            android:importantForAutofill = "no"
            android:autofillHints = "" tools:targetApi = "o" />

        <Spinner
            android:id = "@+id/spinner"
            android:layout_width = "150dp"
            android:layout_height = "wrap_content" />

        <EditText
            android:id = "@+id/datepicker"
            android:layout_width = "130dp"
            android:layout_height = "wrap_content"
            android:ems = "10"
            android:inputType = "date"
            android:autofillHints = ""
            android:hint = "@string/datepicker"
            android:importantForAutofill = "no" tools:targetApi = "o" />

        <EditText
            android:id = "@+id/timepicker"
            android:layout_width = "130dp"
            android:layout_height = "wrap_content"
            android:ems = "10"
            android:inputType = "time"
            android:hint = "@string/timepicker"
            android:autofillHints = "" tools:targetApi = "o" />
</LinearLayout>

</FrameLayout>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
    date.setOnTouchListener(new View.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    Date_Alert(v);
                    return true;
                }

                private void Date_Alert(View v)
                {

    getActivity().getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
    );                
    DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        //date_str = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
                        mYear = year;
                        mMonth = monthOfYear;
                        mDay = dayOfMonth;
                        mMonthName = MONTHS[monthOfYear];
                        Log.d("before", "onDateSet: " + mYear + "" + mMonthName + "" + mDay);
                        start_date_str = mDay + " " + mMonthName + " " + mYear;

                    }
                }, mYear, mMonth, mDay);
        datePickerDialog.show();
}

Клавиатура скрыта. но диалоговое окно выбора даты снова появляется два раза, чтобы выбрать дату !!

Hassam Saeed 07.04.2019 14:08

я знаю, что это возможно... но я хочу выполнить эту задачу с помощью (ontouchlistener)

Hassam Saeed 07.04.2019 14:10

какое устройство вы используете для теста .. эмулятор или физическое устройство?

Rezaul Karim 07.04.2019 14:16

Эмулятор устройства

Hassam Saeed 07.04.2019 14:19

иногда эмулятор создает проблему для сенсорного события, когда вы нажимаете на него, не касаясь ... может быть, это проблема эмулятора ... вы можете дополнительно проверить на реальном устройстве, чтобы быть уверенным в этом

Rezaul Karim 07.04.2019 14:21

пожалуйста, дайте мне знать о тесте

Rezaul Karim 07.04.2019 14:22

такая же проблема на физическом устройстве

Hassam Saeed 07.04.2019 14:37

когда я нажимаю OK после выбора даты, появляется другое диалоговое окно выбора даты

Hassam Saeed 07.04.2019 14:38

пожалуйста, попробуйте отредактировать один сейчас .. в моем случае все работает хорошо

Rezaul Karim 07.04.2019 14:42

я использую реальное устройство. Я не доверяю эмулятору :p

Rezaul Karim 07.04.2019 14:45

Другие вопросы по теме