首页 > 解决方案 > 如何通过标签识别 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();
        }
    }

标签: javaandroidandroid-edittextfindviewbyid

解决方案


要按标签查找视图,请使用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 类的静态类型中受益


推荐阅读