以编程方式向R.id添加id

93

我正在创建一个EditText对象,并尝试在单元测试中引用它。有什么最好的方法可以为这个动态创建的对象添加一个新的id,以便我稍后可以通过findViewById()在单元测试中引用它?


可能是重复问题:[Android:View.setID(int id)以编程方式 - 如何避免ID冲突?](https://dev59.com/oXI-5IYBdhLWcg3wta1q) - rds
3个回答

222

您可以使用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);

1
我可以把文件命名为anothername.xml吗? - ofir_aghai
2
抱歉回复晚了,但是是的,和所有Android资源一样,你可以随意命名那个.xml文件... - Hidden Android

2
“你可以为每个视图使用setId,并分配任何正数,基于Google开发者文档:

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

因此,你可以使用

EveryView.setId(int);

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接