Как запустить календарь из родительской активности во всплывающем окне Android - PullRequest
0 голосов
/ 07 июля 2019

У меня есть функция, которая запускает всплывающие окна с Squareup CalendarView.Мне нужно инициализировать календарь во всплывающем окне, чтобы показать, но я не могу инициализировать его в файле XML, он должен быть в действии.

Я уже пытался получить инициализацию из действия, котороене родительский, и я получаю сообщение об ошибке, в котором говорится, что "Должен быть хотя бы один месяц для отображения. Вы забыли вызвать init ()?"Я попытался просто из родительского действия, но я понимаю, что я не посылаю никакой инициализации во всплывающее окно, поэтому я получаю ту же ошибку.

Вот мой код XML-файла

<com.squareup.timessquare.CalendarPickerView android:layout_width="match_parent"
                                                 android:id="@+id/calendar_dates"
                                                 android:layout_height="match_parent">

    </com.squareup.timessquare.CalendarPickerView>

Здесьмоя функция в моей поп-активности, которая не является родительской.Я понимаю, что если я смогу использовать эту функцию в родительском действии и отправить инициализированный datePicker, я могу получить то, что ищу.

fun settingDate() {
        val today = Date()
        val nextYear = Calendar.getInstance()
        nextYear.add(Calendar.YEAR, 1)

        val datePicker = findViewById(R.id.calendar_dates) as CalendarPickerView

        datePicker.init(today, nextYear.time).inMode(CalendarPickerView.SelectionMode.RANGE)

        datePicker.setOnDateSelectedListener(object : CalendarPickerView.OnDateSelectedListener {
            override fun onDateSelected(date: Date) {
                val calSelected = Calendar.getInstance()
                calSelected.time = date

                val selectedDate =
                    "" + calSelected.get(Calendar.DAY_OF_MONTH) + " " + (calSelected.get(Calendar.MONTH) + 1) + " " + calSelected.get(
                        Calendar.YEAR
                    )
                Toast.makeText(mContext, selectedDate, Toast.LENGTH_LONG).show()
            }

            override fun onDateUnselected(date: Date) {

            }

        })

    }

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

1 Ответ

0 голосов
/ 13 июля 2019

В ответе используется фрагмент, и в строке с именем v.findViewById (R.id.year_view ...) в качестве CalendarView вы получаете представление, которое хотите использовать, в данном случае это календарь. Если вы используете его самостоятельно, получая только идентификатор, вы получите исключение нулевого указателя. То, что мои друзья это способ инициализировать виджет из фрагмента.

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?): View? {
    val v = inflater.inflate(R.layout.fragment_dialog_date_frament, container, false)

    val today = Date()
    val nextYear = Calendar.getInstance()
    nextYear.add(Calendar.YEAR, 1)
    val mCalendarPickerView = v.findViewById<View>(R.id.year_view_calendar) as CalendarPickerView

    mCalendarPickerView.init(today, nextYear.time)
        .inMode(CalendarPickerView.SelectionMode.RANGE)


    mCalendarPickerView.setOnDateSelectedListener(object : CalendarPickerView.OnDateSelectedListener {
        override fun onDateSelected(date: Date) {
            val calSelected = Calendar.getInstance()
            calSelected.time = date

            val selectedDate =
                "" + calSelected.get(Calendar.DAY_OF_MONTH) + " " + (calSelected.get(Calendar.MONTH) + 1) + " " + calSelected.get(
                    Calendar.YEAR
                )
            Toast.makeText(context, selectedDate, Toast.LENGTH_LONG).show()
        }

        override fun onDateUnselected(date: Date) {

        }

    })

    return v
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...