以编程方式将 id 添加到 R.id

Posted

技术标签:

【中文标题】以编程方式将 id 添加到 R.id【英文标题】:programmatically add id to R.id 【发布时间】:2011-03-14 01:51:47 【问题描述】:

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

【问题讨论】:

android: View.setID(int id) programmatically - how to avoid ID conflicts? 的可能重复项 【参考方案1】:

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

【讨论】:

我可以将文件命名为 anothername.xml 吗? 抱歉回复晚了,但是,与所有 Android 资源一样,您可以随意命名该 .xml...【参考方案2】:

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

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

所以你可以使用

EveryView.setId(int);

【讨论】:

【参考方案3】:

这是我在 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

【讨论】:

以上是关于以编程方式将 id 添加到 R.id的主要内容,如果未能解决你的问题,请参考以下文章

使用 ConstraintSet 以编程方式将 Button 添加到 ConstrainLayout

以编程方式将值添加到网格视图页脚

如何在android中以编程方式将铃声添加到本机应用程序联系人

以编程方式将几列添加到 Spark DataFrame

以编程方式将一堆自定义视图从 XIB 添加到 UIStackView

以编程方式将 UISearchBar 添加到普通 ViewController 中以编程方式添加的 UITableView