Undesired onItemSelected calls

I found a simple and, I think, elegant solution.
Using tags.
I first created a new XML file called ‘tags’ and put in the following code:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <item name="pos" type="id" />
</resources>

Whenever I myself use spin.setSelection(pos), I also do spin.setTag(R.id.pos, pos), so I am setting the current position as a tag.

Then, in onItemSelected, I am executing code only if(spin.getTag(R.id.pos) != position), where position is the position variable supplied by the function.
In this way, my code is executed only when the user is making a selection.
Since the user has made a selection, the tag has not been updated, so after the processing is done, I update the tag as spin.setTag(R.id.pos, position).

NOTE: It is important to use the same adapter throughout, or the “position” variable might point to different elements.

EDIT: As kaciula pointed out, if you’re not using multiple tags, you can use the simpler version, that is spin.setTag(pos) and spin.getTag() WITHOUT the need for an XML file.

Leave a Comment