programmatically add id to R.id
AndroidAndroid EdittextUnit TestingAndroid Problem Overview
I am creating an EditText
object which I then try to reference in a unit test. What is the best way to add a new id
to R.id
for this dynamically created object, so that I can later reference it via findViewById()
in the unit test?
Android Solutions
Solution 1 - Android
You can set ID's you'll use later in R.id class using an xml resource file, and let Android SDK give them unique values during compile time.
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>
To use it in code:
myEditTextView.setId(R.id.my_edit_text_1);
Solution 2 - Android
You can use setId for every view and assign any positive number, based on google developer:
> Sets the identifier for this view. The identifier does not have to be unique in this view's hierarchy. The identifier should be a positive number.Link
so you can use
EveryView.setId(int);
Solution 3 - Android
Here's my solution as an extension function in 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
}