为何Android Studio 3.0.1中Java支持动态变量名?循环创建TextView求助
嘿,我来帮你搞定这两个问题哈!
问题1:为何Android Studio 3.0.1中的Java允许使用动态变量名?
其实呀,Java本身是静态类型语言,并不支持真正的动态变量名——也就是没办法在运行时凭空创建像wordView1、wordView2这种自定义命名的变量。你可能是看到了类似“动态生成变量名”的代码效果,其实那是用集合(比如List、Map)模拟出来的哦。
举个例子,用Map<String, TextView>就能实现“用字符串当变量名”的效果:
Map<String, TextView> textViewMap = new HashMap<>(); for (int i = 0; i < 10; i++) { TextView tv = new TextView(this); textViewMap.put("wordView" + (i+1), tv); } // 之后可以通过textViewMap.get("wordView5")拿到对应的TextView
这看起来像是动态生成了变量名,但本质上是把“变量名”作为键存在Map里,并不是真的创建了同名的Java变量。Android Studio只是支持你写这样的代码,并不是Java本身允许动态变量名哦。
问题2:批量创建10个TextView的解决方案
你现在重复写10次创建TextView的代码太繁琐啦,用循环就能轻松搞定!而且完全不需要一个个命名wordView1到wordView10,具体步骤如下:
- 先确保你已经有了
words列表(存储要显示的文本),以及父容器rootView(比如LinearLayout、RelativeLayout这些)。 - 用
for循环循环10次,每次创建TextView、设置文本、添加到父容器里就行。如果之后需要单独操作某个TextView,可以把它们存在一个List里。
直接上代码示例:
// 假设words是已经初始化好的List<String>,rootView是你的父容器 List<TextView> textViewList = new ArrayList<>(); // 可选,用来保存所有创建的TextView for (int i = 0; i < 10; i++) { TextView wordView = new TextView(this); // 注意:这里要改成words.get(i)才能显示不同的内容哦,你之前写的get(0)会让所有TextView显示一样的文本 wordView.setText(words.get(i)); rootView.addView(wordView); textViewList.add(wordView); // 把TextView存进列表,之后可以用textViewList.get(0)拿到第一个TextView }
这样循环跑10次,就自动创建并添加了10个TextView啦!如果之后需要修改某个TextView的内容,直接通过textViewList.get(index)就能找到对应的控件,比一个个命名变量方便多了~
内容的提问来源于stack exchange,提问作者Sudin
相关产品推荐
相关产品推荐

