92

我正在创建一个EditText对象,然后尝试在单元测试中引用该对象。id为这个动态创建的对象添加新对象的最佳方法是什么R.id,以便我以后可以findViewById()在单元测试中引用它?

4

3 回答 3

217

您可以使用 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);
于 2010-07-10T04:08:49.310 回答
2

您可以根据谷歌开发人员为每个视图使用 setId 并分配任何正数:

设置此视图的标识符。标识符在此视图的层次结构中不必是唯一的。标识符应该是一个正数。关联

所以你可以使用

EveryView.setId(int);
于 2019-07-01T08:29:41.660 回答
0

这是我在 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
}
于 2020-11-16T16:59:02.203 回答