【发布时间】:2011-03-14 01:51:47
【问题描述】:
我正在创建一个EditText 对象,然后我尝试在单元测试中引用它。为这个动态创建的对象添加一个新的id 到R.id 的最佳方法是什么,以便我以后可以在单元测试中通过findViewById() 引用它?
【问题讨论】:
标签: android android-edittext unit-testing
我正在创建一个EditText 对象,然后我尝试在单元测试中引用它。为这个动态创建的对象添加一个新的id 到R.id 的最佳方法是什么,以便我以后可以在单元测试中通过findViewById() 引用它?
【问题讨论】:
标签: android android-edittext unit-testing
您可以使用 xml 资源文件设置稍后在 R.id 类中使用的 ID,并让 Android SDK 在编译期间为其赋予唯一值。
res/values/ids.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_edit_text_1" type="id"/>
<item name="my_button_1" type="id"/>
<item name="my_time_picker_1" type="id"/>
</resources>
在代码中使用它:
myEditTextView.setId(R.id.my_edit_text_1);
【讨论】:
您可以为每个视图使用 setId 并根据谷歌开发者分配任何正数:
设置此视图的标识符。标识符在此视图的层次结构中不必是唯一的。标识符应该是一个正数。Link
所以你可以使用
EveryView.setId(int);
【讨论】:
这是我在 kotlin 中作为扩展函数的解决方案:
/* sets a valid id that isn't in use */
fun View.findAndSetFirstValidId() {
var i: Int
do {
i = Random.nextInt()
} while (findViewById<View>(i) != null)
id = i
}
【讨论】: