Доступ к AlarmManager из адаптера RecyclerView

Я делаю приложение-будильник для Android в классе. Аварийные сигналы отображаются внутри recyclerview в основном действии, и я хочу, чтобы они удалялись при нажатии. Я могу удалить его из созданной мной базы данных аварийных сигналов, но я не могу получить доступ к 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 строках контекст имеет несоответствие типа, так как это тип MyAdapter - я не уверен, что мне нужно здесь указать, что-то похожее на MainActivity.context, я бы предположил

getSystemService также показывает ошибку вывода типа в виде строки, и я предполагаю, что это вызывает несоответствие типа для context.ALARM_SERVICE в виде строки, а не контекста.

Каков правильный контекст и как я могу получить доступ к AlarmManager внутри адаптера?




Ответы (1)


Вы можете использовать контекст представления вашего элемента:

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)
person Andrei Tanana    schedule 25.05.2020