当前位置: 首页 > 知识库问答 >
问题:

从RecycerView适配器中访问AlarmManager

郝池暝
2023-03-14

我在课堂上做一个Android报警应用程序。警报显示在主活动的RecycerView中,我希望在按下时删除它们。我可以从我设置的警报数据库中清除它,但我不能访问AlarmManager来取消警报,而且PendingIntent的上下文似乎也是错误的。

 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, index: Int) {
        val myViewHolder = holder as MyViewHolder
        val sdf = SimpleDateFormat("HH:mm EEEE")
        myViewHolder.tvAlarmTime.text = sdf.format(alarms[index].milliseconds)
        myViewHolder.tvAlarmFrequency.text = alarms[index].frequency
        myViewHolder.itemView.setOnClickListener {
            launch {
                withContext(Dispatchers.IO) {
                    val db = AlarmDatabase.getDatabase(myViewHolder.tvAlarmTime.context)
                    db.alarmDao().deleteTriggeredAlarm((alarms[index].id))
                }

            }
            val pi = PendingIntent.getBroadcast(this, (alarms[index].id).toInt(), Intent("alarmTask"), PendingIntent.FLAG_UPDATE_CURRENT)
            val alarmMgr = getSystemService(Context.ALARM_SERVICE) as AlarmManager
            alarmMgr.cancel(pi)

        }
    }

在最后3行中,context有一个类型不匹配,因为这是一个MyAdapter类型--我不确定我需要在这里放什么,类似于mainActivity.context

getSystemService还将类型推断错误显示为字符串,我假设这导致context.alarm_service的类型不匹配为字符串而不是上下文。

正确的上下文是什么,如何访问适配器内的AlarmManager?

共有1个答案

鄢飞鸾
2023-03-14
val context = myViewHolder.itemView.context
val pi = PendingIntent.getBroadcast(context, (alarms[index].id).toInt(), Intent("alarmTask"), PendingIntent.FLAG_UPDATE_CURRENT)
val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmMgr.cancel(pi)
 类似资料:
  • 问题内容: 这个想法是我有一个列表视图,其中每个项目都是一个产品,当我单击该项目时,我需要从列表视图的适配器内部的单击中转到另一个片段。 我的适配器是: 您必须假设所有代码都在工作。 如何转到适配器内的产品Fragment? 问题答案: 为了解决这个问题,我要做的是: 在主类中,我将参数作为值,并通过开关在我感兴趣的main中设置了片段。

  • 我有一个聊天屏幕,我可以与其他用户聊天,我发送聊天数据(消息,时间和发件人通过列表)到RecycerAdapter,用数据填充聊天视图。现在我有一个列表,其中有不同布局的数据。像这样 下面是我的方法,从这里我将第二个arraylist调用到RecycerAdapter中 与上述方法一样,当我尝试通过时,它会从屏幕上删除所有消息,并显示我的图像数据。但我想保留所有的消息,并通过新的列表显示数据图像

  • 我正在用浓缩咖啡测试我的应用程序。我有一个listview,里面有一些数据。我想检查第一行中edittext的值。 我试过: Android.support.test.espresso.AmbiguousViewMatcherException:“With ID:at.stockserv:id/editTextKommissioniert”匹配层次结构中的多个视图。 要访问适配器中的第一行,我可以

  • Android.view.Windowmanager$BadTokenException:无法添加窗口--令牌null不适用于在Android.view.view.viewRootimpl.SetView(viewRootimpl.java:583),在Android.view.WindowmanagerLobal.AddView(WindowmanagerLobal.java:310),在And

  • 问题内容: 所以我有一个自定义的listview。就像Instagram布局一样,每个列表项中都有1张图片和一堆按钮。所以这是问题所在: 我要实现共享按钮。为此,我尝试创建一个从适配器到活动的回调。但这似乎没有用。这是我到目前为止的内容(我裁剪了不相关的部分): 主要活动 列表适配器 错误日志: 问题答案: 您需要告诉适配器使用哪个OnShareClickedListener()实现。现在,在您的