求助android开发中 如果两个控件的id相同 会怎样
3个回答
展开全部
在同一个XML中不可以
但是比如用LayoutInflater加载两次拥有ID的相同XML的话,是可以的。
支持楼上观点,其实findViewById不仅仅可以找被setContentView的XML,任何基于ViewGroup的类都有findViewById,在activity中也有一个。
但如果两个不同XML中都有同一个ID的话,还是会报错
很多IDE(包括Eclipse,AndroidStudio,as,还有手机的AIDE)都会将 包名.R.java放在缓存目录/源码目录下,而自带R.java只有一个,且就这一个R还包含id,layout,attrs,menu,anim等各种元素。如果注册相同ID,layout里就会有两个ID一样,但目标不同的参数,Android不知道选哪一个,就会报错。
类似于一个典型的错误
int x=2,y=3;
int z=x+++y;
↑
系统不知道到底是:
先计算x+y再赋值给z,x自加
(即z=(x++)+y;)
还是
先自加y,然后计算x+y,赋值给z
(即z=x+(++y);)
于是就会报错。
但是比如用LayoutInflater加载两次拥有ID的相同XML的话,是可以的。
支持楼上观点,其实findViewById不仅仅可以找被setContentView的XML,任何基于ViewGroup的类都有findViewById,在activity中也有一个。
但如果两个不同XML中都有同一个ID的话,还是会报错
很多IDE(包括Eclipse,AndroidStudio,as,还有手机的AIDE)都会将 包名.R.java放在缓存目录/源码目录下,而自带R.java只有一个,且就这一个R还包含id,layout,attrs,menu,anim等各种元素。如果注册相同ID,layout里就会有两个ID一样,但目标不同的参数,Android不知道选哪一个,就会报错。
类似于一个典型的错误
int x=2,y=3;
int z=x+++y;
↑
系统不知道到底是:
先计算x+y再赋值给z,x自加
(即z=(x++)+y;)
还是
先自加y,然后计算x+y,赋值给z
(即z=x+(++y);)
于是就会报错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询