今天在调试程序时,本来打算在EditText中加入hint属性的,当然是在xml文件中添加。语句为:android:hint="@string/reg_hint_name"。变量reg_hint_name我是已经在string.xml文件中已经定义了的,但在使用上述语句时,Eclipse一直报找不到字符串reg_hint_name,但是我换成@string/reg_name是可以的,所以我一直想不通,为什么同样都在string.xml文件中定义了,reg_name可以而reg_hint_name就不可以了呢。
随后,我试图在网上查找答案,通过网上一些提示,我才突然意识到,在eclipse中,寻找变量时并不是在xml中定义了就可以的,资源的引用都是要通过R.java这个类来实现。换句话说,如果在R.java文件中没有定义的话,引用时也是会报出无法找到资源的错误。所以这也就提醒了我,在出现无法找到资源这个错误时,先要看在layout文件下的string.xml或者其他xml文件中有没定义,还要去查看下R.java文件中有没定义。
然后我就查看了下gen文件下的R.java文件,发现其定义了 reg_name的ID,但却没有定义reg_hint_name的ID,这也就解释了为什么同样都在string.xml中定义了,但eclipse却会产生不一样的结果。
接下来,就需要将reg_hint_name的ID加入到R.java文件中,手工添加也可以,但是当变量较多时,是很难做到的,而且容易出错。通过查资料获悉,可以通过Project->clean的方式解决,于是试了下,结果是,R.java不见了,有点慌。再一查,说是重新启动一遍,照做。发现还是没有,分析可能是xml中存在错误,查找修改完毕,重新启动eclipse,R.java出现了,有点激动,打开一看,reg_hint_name出现了,ID有了。
在执行完上述的操作后,变量reg_hint_name在R.java中也有了,但不知道为什么,在layout/register.xml文件中使用android:hint="@string/reg_hint_name"仍然报错,目前没有找到解决办法,在register.java中测试过,使用下述语句是没有问题的:
et_password = (EditText)findViewById(R.id.et_name);
et_password.setText(R.string.reg_hint_name);
已经折腾太久,先把这个问题先放放吧,待反过来解决。(备注:若有朋友有解决方法,也请告诉我,谢谢!)