Android Studio中MaterialButton修改图标时Activity停止运行如何解决
问题根因
你调用了错误的方法修改按钮图标。setIconTintResource()的作用是修改图标着色,要求传入的参数是颜色资源ID,你传入了drawable资源ID,类型不匹配会抛出Resources.NotFoundException,这是导致Activity直接崩溃的核心原因。
修复方案
要替换MaterialButton的图标,应该调用setIconResource()方法,传入drawable资源ID即可,修改后的代码如下:
public void playIfItemClicked(SearchMusic lm, int i) { mediaPlayer.reset(); Uri u = lm.getListMusic().get(i).getUri(); InteractiveMusic intMus = new InteractiveMusic(mediaPlayer, u); try { intMus.playMusic(); // 替换图标调用setIconResource btnPlay.setIconResource(R.drawable.ic_pause); // 如果需要同时修改图标颜色,再额外调用setIconTintResource,参数传入颜色资源即可 // btnPlay.setIconTintResource(R.color.自定义图标颜色); } catch (IOException e) { e.printStackTrace(); } }
其他排查点
- 确认
R.drawable.ic_pause是合法存在的drawable资源,没有拼写错误、文件名含特殊字符等问题 - 确认
playIfItemClicked方法的执行时机在onCreate之后,避免btnPlay未完成初始化导致空指针崩溃 - 音频播放逻辑不要放在主线程执行,避免阻塞主线程引发ANR
内容的提问来源于stack exchange,提问作者Nicolas Zanforlini
相关产品推荐
相关产品推荐

