如何实现点击菜单切换图片后自动恢复默认图片?
实现点击菜单切换图片后自动恢复默认的方案
首先在Activity中声明一个CoroutineJob对象,用来管理延迟恢复的任务,避免多次点击时出现冲突:
private var resetImageJob: Job? = null
然后修改onOptionsItemSelected方法,在每个切换图片的分支中加入延迟恢复逻辑(以3秒为例,可自行调整时长):
override fun onOptionsItemSelected(item: MenuItem): Boolean { // 先取消之前的延迟任务,防止多次点击后重复触发恢复操作 resetImageJob?.cancel() return when (item.itemId) { R.id.nav_sair -> { val intent = Intent(this, LoginActivity::class.java) startActivity(intent) finish() Toast.makeText(this, "Logue novamente", Toast.LENGTH_LONG).show() true } R.id.nav_sobre -> { binding.imvTroca.setImageResource(R.drawable.perfectaprint_quemsomos_full_editado) startResetImageTask() true } R.id.nav_impressoras -> { binding.imvTroca.setImageResource(R.drawable.imagem_impressoras_edit) startResetImageTask() true } R.id.nav_produtos_materiais -> { binding.imvTroca.setImageResource(R.drawable.produtos_materiais) startResetImageTask() true } R.id.nav_fornecedores -> { binding.imvTroca.setImageResource(R.drawable.fornecedores) startResetImageTask() true } else -> super.onOptionsItemSelected(item) } } // 封装延迟恢复默认图片的方法 private fun startResetImageTask() { resetImageJob = lifecycleScope.launch { // 延迟3秒(3000毫秒),可根据需求修改时长 delay(3000) // 替换为你的默认图片资源ID binding.imvTroca.setImageResource(R.drawable.your_default_image) } }
关键说明:
- 用
lifecycleScope启动协程,确保协程跟随Activity生命周期,避免内存泄漏 - 每次点击菜单时取消之前的任务,防止用户连续点击后多个延迟任务同时执行,造成图片频繁切换
- 将恢复逻辑封装为单独方法,减少代码重复
内容的提问来源于stack exchange,提问作者Alanpattoon
相关产品推荐
相关产品推荐

