【问题标题】:Date Picker in Adapter class showing error适配器类中的日期选择器显示错误
【发布时间】:2018-07-27 05:57:57
【问题描述】:

可能,这是重复的问题,但我没有找到解决方案我在适配器类中使用日期选择器,每当我点击 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); 它适用于 Nougat,但不适用于某些设备。

当我使用时

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;}

【问题讨论】:

  • 你能把代码放在你打电话的地方吗datePickerDialog()
  • @abdul 我编辑代码
  • activity 是什么?它有什么上下文?
  • @abdul 看看我的构造函数

标签: android date window picker


【解决方案1】:

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

WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

此常量在 API 级别 26 中已弃用。对于非系统应用。采用 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 代替。

WindowManager.LayoutParams.TYPE_TOAST 需要 SYSTEM_ALERT_WINDOW permission

【讨论】:

  • 我使用了 TYPE_SYSTEM_ALERT 但我在 main-feast 中获得了权限,但它显示错误“窗口类型 2003 的权限被拒绝”,需要获得运行时权限
  • 你会尝试 WindowManager.LayoutParams.TYPE_TOAST 并使用 SYSTEM_ALERT_WINDOW 权限
  • 我尝试了 TYPE_TOAST,它正在工作,但有些设备没有显示日期选择器,
  • 能否请您提供它不工作的设备的详细信息。
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多