Доступ к AlarmManager из адаптера RecyclerView - PullRequest
1 голос
/ 25 мая 2020

Я делаю 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 также показывает ошибку вывода типа в виде строки, и я предполагаю, что это вызывает несоответствие типа для контекста. ALARM_SERVICE в виде строки, а не контекста.

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

1 Ответ

1 голос
/ 26 мая 2020

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

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)
...