@andrej3337

Как получить данные из вложенного метода слушателя и дальше их использовать вне его?

В приложении используется кнопка с отображением текущей даты, при нажатии на которую появляется спиннер выбора произвольной даты. После выбора даты кнопка отображает выбранную дату.

Имеется метод слушателя

private void initDatePicker()
        {
                DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener()
                {
                        @Override
                        public void onDateSet(DatePicker datePicker, int year, int month, int day)
                        {
                                month = month + 1;
                                date = makeDateString(day, month, year);
                                dateButton.setText(date); //<--- здесь кнопке передается дата сетом
                        }
                                                                     /**А за пределами скобок выше даже публичные переменные, объявленные в текущем классе, которым присвоены данные из переменной  date, являются пустыми.**/
                };
                Calendar cal = Calendar.getInstance();
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_MONTH);

                int style = AlertDialog.THEME_HOLO_DARK;

                datePickerDialog = new DatePickerDialog(this, style, dateSetListener, year, month, day);
        }

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

Мне не нужно их передавать в xml вид, иначе я бы это сделал по образу с dateButton.setText(date);, мне нужно использовать полученную при выборе пользователем дату в этом же классе, но в других методах (функциях).

Как это можно сделать?

Спасибо
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Ты должен понимать, что листенер нужен для того, чтобы выполнить какие-либо действия асинхронно. В этом его смысл. Если ты хочешь, чтобы при выборе даты выполнялся какой-то код, нужно его явно вызвать из листенера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы