我的程序需要根据参数,动态的生成若干EditText和RadioButton,当操作者输入了参数后点击【运行】按钮。此时,需要将画面上所有控件上入力的信息获取到,然后进行业务处理。小弟刚刚接触Android,只知道在Activity中能用findViewById这个方法获得画面上的控件,然后再获得控件上的Text属性值。  这样的话,就需要在动态生成控件的时候,给生成的控件分配Id。我现在的做法是在循环里边把循环变量int i作为控件的Id属性赋值。但我觉得这样做很不安全,不知道有没有什么其他的解决方案。望高手指点 小弟先谢谢了!!!!  注:在xml定义好控件的Id后android可以自动的将其转换为int型在R.java中生成,不知这一转化的规则是什么?如果我可以也用这样的方法将String型的控件名称转化为Int型赋给id的话这样就好多了。但不知能不能实现。

解决方案 »

  1.   

    setID应该是可以的,但是一般都是布局文件中指定,然后编译时系统自动生成,系统生成的ID可以保持唯一性,不过理论上自己定义也是可以的。
    你可以试试,通过getId()获取控件的ID,如果和R.java中的一样,那说明可以自己分配,而且ID不是一定要指定的,创建一个空的工程,也就是helloworld,main.xml里的textview就没有指定id,指定id是为了你可以在程序中代码方式获取控件实例。
      

  2.   

    SetId方法我现在用了,是可以的。但现在的问题是给控件分配Id时,赋一个什么样的值好。我现在的做法是在循环生成控件的时候将循环变量i赋给控件做为id,但我觉得这样不是很妥...
      

  3.   

    这个也不好定义,最好自己定义一个范围,比如一个常量
    static final int GLOBAL_ID = 0xff0000;
    然后循环中每个控件的id都是GLOBAL_ID+i这样分配出来的,总之自己要清除id是怎么分配的
      

  4.   

    恩 谢谢,这个思路挺好的。不过我就是害怕自己分配的id如果与R.java中的值出现重复的话就会出错了。所以我想知道Android是怎么把xml中我们自己给控件定义的字String类型的Id转换成Int型的。如果知道了它的这个转换方法,我就也可以给动态生成的控件赋String类型的Id这样就肯定不会出错了。
      

  5.   

    看R.java文件,id都是0x7f开头的
    例如:
    drawable
    0x7f010000
    0x7f010001
    ...anim
    0x7f020000
    0x7f020001
    ...color
    0x7f030000
    ...
      

  6.   

    其实动态生成的,完全可以不用设置id。
    只要记住view名字就可以了
      

  7.   

    我觉得这个是比较好的办法,你就算设置了id,还是要通过fingdviewbyid来获取对象,何必多次一步了?
    还不如就定义一个view的对象,然后通过这个对象来进行操作。
      

  8.   

    谢谢回答,11楼的回答不是很明白,记住View的名字后怎么在其他的方法中获得呐?
    我动态生成的控件是为了输入参数用的。我现在采取的方案是用参数的名字,一个字符串的HashCode作为Id。然后在Onclick方法中再通过findViewById取得他。