如何创建TextView ID数组?声明时出现‘无法解析符号’报错
解决TextView数组初始化时“无法解析符号”的问题
我之前也踩过这个坑!你遇到的“无法解析符号oldtoday00”错误,本质是这些oldtoday00、oldtoday01之类的变量要么没被正确声明/初始化,要么和布局里的控件ID没对应上。咱们一步步来解决:
先搞清楚错误原因
出现这个错误的常见情况:
- 布局文件里根本没给对应的TextView设置
android:id="@+id/oldtoday00"这类ID - 代码里没通过
findViewById()把变量和布局控件绑定,直接就把变量放进数组了 - 变量名和布局里的ID拼写不一致(比如大小写、数字写错)
推荐的解决方案:用循环动态初始化数组(彻底避免重复代码)
既然你想减少重复代码,最好的方式就是通过循环动态获取每个TextView的ID,不用一个个写findViewById()。步骤如下:
1. 确保布局里的TextView都有规范的ID
比如你的布局里每个TextView的ID是oldtoday00、oldtoday01...oldtodayN:
<TextView android:id="@+id/oldtoday00" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/oldtoday01" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <!-- 其他TextView依此类推 -->
2. 在代码里循环初始化数组
用getResources().getIdentifier()动态拼接ID名称并获取资源ID,然后逐个初始化数组元素:
// 假设你有10个TextView(从oldtoday00到oldtoday09) int textViewTotal = 10; TextView[] textViewArray = new TextView[textViewTotal]; for (int i = 0; i < textViewTotal; i++) { // 拼接ID名称,比如i=0时是"oldtoday00",i=1时是"oldtoday01" String idName = "oldtoday" + String.format("%02d", i); // 获取对应的资源ID int resId = getResources().getIdentifier(idName, "id", getPackageName()); // 绑定控件到数组元素 textViewArray[i] = findViewById(resId); }
如果是在Fragment里使用,记得把findViewById()换成requireView().findViewById(),getPackageName()换成requireContext().getPackageName()。
备选方案:先逐个初始化变量再放进数组(不推荐,但能解决错误)
如果你暂时不想用动态获取的方式,那必须先给每个变量绑定控件,再放进数组:
// 先逐个绑定布局控件 TextView oldtoday00 = findViewById(R.id.oldtoday00); TextView oldtoday01 = findViewById(R.id.oldtoday01); TextView oldtoday02 = findViewById(R.id.oldtoday02); // ... 其他TextView // 再初始化数组 TextView[] a = {oldtoday00, oldtoday01, oldtoday02, ...};
不过这种方式还是有重复代码,不符合你想简化的初衷,所以更推荐第一种动态循环的方法。
额外注意事项
- 确保
textViewTotal的数值和你实际的TextView数量一致,避免数组越界 - 如果你的ID命名不是
oldtoday+两位数字,记得调整idName的拼接逻辑 - 要是用的是ViewBinding/DataBinding,也可以通过类似的循环方式获取控件,原理是一样的
内容的提问来源于stack exchange,提问作者N00b
相关产品推荐
相关产品推荐

