android - 适配器类中的日期选择器显示错误

标签 android date window picker

可能,这是重复的问题,但我没有找到解决方案我在 Adapter 类中使用日期选择器,每当我单击 TextView 时,日期选择器显示错误

Unable to add window -- token null is not for an application

我在 Stack Overflow 上搜索过,我找到了解决方案,但它只适用于某些设备,

 private String dateDialouge(final BwViewHolder feedListRowHolder) {


    DatePickerDialog datePickerDialog = new DatePickerDialog(activity, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

            dateTime = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            feedListRowHolder.tv_date.setText(dateTime);

        }
    }, year, month, date);

    //setDate = feedListRowHolder.tv_date.getText().toString();
    datePickerDialog.getDatePicker().setMinDate(minDate);
    datePickerDialog.getDatePicker().setMaxDate(maxDay);  // 24 hours
    datePickerDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    //WindowManager.LayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    datePickerDialog.show();

    return dateTime;
}

当我使用窗口类型时 datePickerDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); 它适用于牛轧糖,但不适用于某些设备。

当我使用

datePickerDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

它将显示错误 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application in adapter class

已取得权限

<uses-permission android:name="INTERNAL_SYSTEM_WINDOW "/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

看看我的构造器

  public BoxServicesAdapter(Activity activity,Context context, List<BoxServicesBean> feedItemList, String service_id, String service_title) {
    this.feedItemList = feedItemList;
    this.mContext = context;
    this.service_id = service_id;
    this.service_title = service_title;
    this.boxadapter = this;
    this.activity=activity;}

最佳答案

WindowManager.LayoutParams.TYPE_TOAST 对于非系统应用程序,此常量在 API 级别 26 中已弃用。请改用 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY

WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

This constant was deprecated in API level 26. for non-system apps. Use WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY instead.

WindowManager.LayoutParams.TYPE_TOAST 需要 SYSTEM_ALERT_WINDOW 权限

关于android - 适配器类中的日期选择器显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48824837/

相关文章:

android - 有没有办法在双卡手机的两个插槽中获取运营商名称?

android - 构造函数 vs 字段 vs 方法注入(inject) Dagger 2

Java 字符串日期到 XMLGregorianCalendar 格式 yyyy-MM-dd'T'HH :mm:ss. SSSSSSS'Z'

Java - 文件下载使程序停止

macos - SwiftUI:窗口关闭时运行代码 macOS

android - 通过 http REST 和 EJB3 连接两个 android 应用程序

java - 在 Android/Java 中更改 XML 值

Python:接下来几个月的工作日位置

javascript - JS Date() 返回正确的时区但错误的日期

wpf - WPF 中的 Window.Close() 是同步的吗?