我试图通过for()循环从应用程序的一系列EditText视图中获取值,但是当我调用getText()方法时,应用程序崩溃了。有9个EditText,它们每个都有一个1-9的Tag,所以我试图使用getIdentifier()方法并使用其Tag搜索每个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();
}
}
答案 0 :(得分:1)
我认为您的应用程序已崩溃,因为xCurrentBox为null。 您可以定义一个int数组,并在其中存储每个EditText的ID,并使用for循环访问所有EditText。
当然您可以找到带有标签的视图。但您必须可以访问根视图。 例如,我的活动中有一个线性布局,可以使用它来通过标签访问子视图。
例如:
LinearLayout linearLayout = findViewById(R.id.linearLayout);
for(int i=1 ; i<=4 ; i++)
{
EditText et = linearLayout.findViewWithTag(i+"");
Toast.makeText(this , et.getText().toString() ,
Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:1)
要按其标签查找视图,请使用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类从静态类型中受益