You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用setText()传入整数时程序崩溃?Button与TextView表现差异问询

为什么直接给Button传整数调用setText()会崩溃?

哈哈,这个坑我刚学Android的时候也踩过!其实问题出在setText()方法的重载逻辑上,跟Button还是TextView本身没关系,咱们一步步说清楚:

核心原因:setText()的两个重载方法完全不同

Android的TextView(包括继承它的Button)有两个常用的setText()重载:

  • setText(CharSequence text):这才是用来显示文本内容的方法,不管你传String还是其他CharSequence子类,都会直接把内容显示在控件上。你用Integer.toString(answers.get(0))把整数转成字符串后,调用的就是这个版本,所以运行正常。
  • setText(int resId):这个方法的参数是字符串资源的ID(比如R.string.submit这种系统或你自己定义的资源ID),而不是你要显示的整数数值。当你直接传answers.get(0)这个整数时,系统会去APP的资源文件里找对应ID的字符串,如果找不到(99%的情况都是这样,因为普通整数不会对应合法的资源ID),就会抛出Resources$NotFoundException,直接导致APP崩溃。

关于“TextView可以直接传整数”的误会

你觉得TextView能直接传整数显示,其实是个错觉:

  • 如果你传的整数刚好是某个字符串资源的ID(比如textView.setText(R.string.app_name)),那确实能显示对应的文本;
  • 但如果传的是普通数值(比如textView.setText(123)),一样会崩溃,跟Button的情况完全一样。

正确的解决方式

必须把整数转换成字符串后再传给setText(),常用的几种写法:

  • 用Integer.toString()转换:
    button0.setText(Integer.toString(answers.get(0)));
    
  • 用String.valueOf()转换:
    button0.setText(String.valueOf(answers.get(0)));
    
  • 如果需要格式化(比如补零、加单位),可以用String.format():
    button0.setText(String.format("%d分", answers.get(0)));
    

内容的提问来源于stack exchange,提问作者Vivank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:54