Android Resource IDs

AndroidResources

Android Problem Overview


I'm retrieving custom Resource IDs from a custom xml view type. I'm asked to specify a default int value for the retrieval and was wondering what is the range of IDs? Are they always positive or do they include zero??

i.e is -1 a valid "null" reference AND/OR is 0 a valid "null" reference?

Thanks

EDIT

Custom XML resource/attribute file

<resources>
	<declare-styleable name="ToggleImageButton">
        <attr name="onImage" format="integer" />
        <attr name="offImage" format="integer" />
    </declare-styleable>
</resources>

Defined in my constructor for my custom ui

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ToggleImageButton);
		
int offResource = a.getInt(R.styleable.ToggleImageButton_offImage, -1);

Basically the -1 at the end of the 2nd line is the default parameter for this data type. It may or may not be initialized in the XML view when developing and this allows default behavior to be specified this way.

Android Solutions


Solution 1 - Android

According to the documentation, Resources.getIdentifier()

> Returns 0 if no such resource > was found. (0 is not a valid resource ID.)

UPDATE (after 5+ years thanks to Micer):

  • API 29+: Resources.ID_NULL constant
  • older API: ResourcesCompat.ID_NULL

Solution 2 - Android

0 is a null/invalid value for a resource ID.

Solution 3 - Android

According to https://developer.android.com/reference/android/content/res/Resources#ID_NULL, 0 is the same as setting @null in XML, meaning you can use it i.e. when you want to clear the resource.

It is an invalid resource ID.

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
QuestionKurruView Question on Stackoverflow
Solution 1 - AndroidEwoksView Answer on Stackoverflow
Solution 2 - AndroidadampView Answer on Stackoverflow
Solution 3 - AndroidMicerView Answer on Stackoverflow