programmatically add id to R.id

AndroidAndroid EdittextUnit Testing

Android 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
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBenView Question on Stackoverflow
Solution 1 - AndroidHidden AndroidView Answer on Stackoverflow
Solution 2 - AndroidShojaeddinView Answer on Stackoverflow
Solution 3 - AndroidAmin KeshavarzianView Answer on Stackoverflow