我有一个应用,其中有多个文本字段。我希望能够在编辑它们和不编辑它们之间切换。如何在不对每个EditText
中的每个人的ID进行硬编码的情况下完成此操作?
例如,我想要替代
EditText Et = findViewById((R.id.one));
Et.setFocusable(false);
Et.setClickable(false);
Et = findViewById((R.id.two));
Et.setFocusable(false);
Et.setClickable(false);
//...continue the pattern
Et = findViewById((R.id.ten));
答案 0 :(得分:1)
将它们放入数组中:
EditText[] etArray = { findViewById(R.id.one), findViewById(R.id.two), findViewById(R.id.three) };
for (EditText et : etArray) {
et.setFocusable(false);
et.setClickable(false);
}
或如果名称类似于10个视图的EditText1,EditText2 ...
for (int i = 1; i <= 10; i++) {
int id = getResources().getIdentifier("EditText" + i, "id", getPackageName());
EditText et = findViewById(id);
et.setFocusable(false);
et.setClickable(false);
}
甚至更好的是,在onCreate()
中创建一个ArrayList并使用该列表:
该声明在您的活动中具有全球性
ArrayList<EditText> etArrayList;
这是用于onCreate():
etArrayList = new ArrayList<EditText>();
for (int i = 1; i <= 10; i++) {
int id = getResources().getIdentifier("EditText" + i, "id", getPackageName());
EditText et = findViewById(id);
etArrayList.add(et);
}
并在您的活动班级中的任何地方使用它:
for (EditText et : etArrayList) {
et.setFocusable(false);
et.setClickable(false);
}
答案 1 :(得分:0)
是的,可以在不进行硬编码的情况下修改您的EditText。假设它们包含在名为LinearLayout
的{{1}}中,那么您可以按照以下方式遍历它们:
main_content