java - 如何通过标签识别 EditText
问题描述
我正在尝试使用 for() 循环从我的应用程序中的一系列 EditText 视图中获取值,但是当我调用 getText() 方法时,应用程序崩溃了。有 9 个 EditText,它们每个都有一个从 1 到 9 的标签,所以我尝试使用 getIdentifier() 方法并使用其标签搜索每个 EditText,我认为这是不起作用的部分......这里有任何想法? 提前致谢!
public void xCalculateProfits (View view){
for (int x = 1; x <= 9; x++){
EditText xCurrentBox = (EditText) findViewById(getResources().getIdentifier(Integer.toString(x),"tag",getPackageName()));
Toast.makeText(this, xCurrentBox.getText().toString(), Toast.LENGTH_SHORT).show();
}
}
解决方案
要按标签查找视图,请使用View#findViewWithTag("tag")
. 这是一个View
类的方法,因此您必须在 EditTexts 下方的任何布局上调用它,例如根视图:
View root = getWindow().getDecorView().getRootView();
for (int x = 1; x <= 9; x++){
EditText xCurrentBox = (EditText) root.findViewWithTag("" + i);
Toast.makeText(this, xCurrentBox.getText().toString(), Toast.LENGTH_SHORT).show();
}
但是,如果您在布局 .xml 文件中创建了这些 EditText(不是动态生成的),我建议创建一个包含它们的 ID 的数组,如下所示:
public int[] viewsIds = {
R.id.edit_text1,
R.id.edit_text2,
R.id.edit_text3,
R.id.edit_text4,
...
};
然后在你的 for 循环中使用它
for (int x = 1; x <= 9; x++){
EditText xCurrentBox = (EditText) findViewById(viewsIds[i]);
Toast.makeText(this, xCurrentBox.getText().toString(), Toast.LENGTH_SHORT).show();
}
这样您的代码就更安全了,因为您可以从使用自动生成的 R 类的静态类型中受益
推荐阅读
- java - Apache ActiveMQ Artemis 减速
- angular - AppComponent_Host.ngfactory.js?[sm]:1 ERROR 错误:选择器“ng-component”不匹配任何元素
- sql-server - SMO 使用 PowerShell 生成数据库脚本,因此与从 Management Studio 手动创建脚本的方式相同
- dotnetnuke - 我可以将 web.config 设置添加到 DNN 模块清单文件吗?
- postgresql - 在 django 中选择字段键存储在 postgres 数据库中而不是值?
- java - 调用方法后,我的 java 文件意外打印了两行代码。这是什么原因造成的?
- java - 在 DDD 中使用存储库的工厂模式
- php - SQL 在按钮单击时更新表行
- git - 安装 LightGBM 时出错
- php - 未检测到 Symfony/Doctrine ORM 映射