如何通过其标签识别EditText

时间:2019-12-30 16:20:27

标签: java android android-edittext findviewbyid

我试图通过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();
        }
    }

2 个答案:

答案 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类从静态类型中受益