使用数组进行组件声明perpouses

时间:2015-11-22 13:02:48

标签: android

我想以不同的方式声明按钮和其他组件,希望减少我的代码行。 所以,我试过这种方式:

public class Main extends Activity {
            EditText[] Items;
            TextView[] Total;
            String[] ids = {"editText1","editText2","textView8","textView7"};
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                for(int i=0;i<2;i++){
                    Items[i]=(EditText)findViewById(R.id.ids[i]);`
                }
            }
        }

它不起作用,你明白我想做什么吗?有可能吗?

3 个答案:

答案 0 :(得分:1)

R.id.Something是自动生成的。

你不能通过使用字符串来引用它们......

如果将它们声明为int consts数组,则可以迭代: int[] ids = new int[]{R.id.editText1,R.id.editText2,R.id.textView8,R.id.textView7};

然后 Items[i]=(EditText)findViewById(ids[i]);

答案 1 :(得分:0)

R.id.someting实际上是一个在项目中从R文件获得的int值,如常量值。你不能像字符串一样使用它。如果您是初学者,在项目中找到R文件有点棘手,但是当您找到它时,您会看到xml文件中的所有视图都具有通过R.id.name连接的int值。

答案 2 :(得分:0)

这是一个古老的问题,但是我感觉缺少一个答案。实际上,您可以通过使用

来完全按预期进行此操作
Resources.getIdentifier(String name, String defType, String defPackage)

查看详细信息here

在文档中不建议这样做,因为它效率低下,所以我不会养成习惯,但是您可能会发现特殊的情况,这是合理的。例如,我将其用于在我的应用的非生产版本中添加测试数据。

因此,在您的情况下,可能看起来像

Items[i]=findViewById(getResources().getIdentifier("editText" + i, "id", getPackageName()));