Создать DatePicker внутри адаптера в Android - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть адаптер recyclerView.Внутри этого есть динамическая форма.Форма создается в соответствии с типом, который отправляется с сервера.Он работает в случае строк, но при наличии «даты» в регистре возникает ошибка.Ошибка:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?

Код можно увидеть ниже;

holder.et.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);

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

                            @Override
                            public void onDateSet(android.widget.DatePicker view, int year,
                                                  int monthOfYear, int dayOfMonth) {
                                SimpleDateFormat fr = new SimpleDateFormat("dd-MM-yyyy");
                                holder.et.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);

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

Вышеуказанная ошибка в строке

datePickerDialog.show();

Может кто-нибудь помочь мне?

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Мне потребовалось 3 часа, чтобы понять это, и оказалось, что это очень простой метод.Все, что вам нужно знать, когда вы используете какой-либо диалог в адаптере, getContext (), контекст или действие, когда-нибудь не сработает.

Вот трюк, который я использовал v.getRootView().getContext(), где v - это объект представления, на который вы ссылаетесь
Например

holder.mDateText.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new DatePickerDialog(v.getRootView().getContext(), date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });  

Также см. Здесь .. Нажмите здесь

0 голосов
/ 20 ноября 2018

Я думаю, что проблема в вашем контексте. Пожалуйста, используйте Activity.this или передайте контекст активности вашему адаптеру. Думаю, ваша проблема будет решена.

...