不需要的onItemSelected调用

Vedavyas bhat

我有36个微调器,已经使用一些值进行了初始化。我已经将它们与onItemSelectedListener一起使用。与往常一样,用户可以与这些微调器交互,从而触发onItemSeected函数。

一个问题是该调用是在init期间进行的,但是我在这里找到了解决方案,并且避免了使用全局变量“ count”并在执行onItemSelected内部的代码之前检查count> 36。

我的问题是:用户可以选择单击一个名为“上一个”的按钮,在该按钮上,我必须重置一些微调器值。

我尝试在重置微调器之前将count的值更改为0,然后在重置后将其更改回37,但是我了解到onItemSelected仅在执行完所有其他函数之后才被调用,因此称为AFTER count即使微调器值一经用户选择即被设置,也将更改为37。

我需要反复刷新一些微调器,而无需关闭onItemSelected函数。谁能帮我找到解决方案吗?谢谢。

Vedavyas bhat

我找到了一个简单且优雅的解决方案。使用标签。我首先创建了一个名为“ tags”的新XML文件,并输入以下代码:

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

每当我自己使用时spin.setSelection(pos),我也会使用spin.setTag(R.id.pos, pos)因此我会将当前位置设置为标签。

然后,在onItemSelected中,我仅执行代码if(spin.getTag(R.id.pos) != position),其中position是该函数提供的位置变量。这样,仅当用户进行选择时才执行我的代码。由于用户已进行选择,因此标签尚未更新,因此在完成处理后,我将标签更新为spin.setTag(R.id.pos, position)

注意:重要的是始终使用相同的适配器,否则“ position”变量可能指向不同的元素。

编辑:作为kaciula指出的那样,如果你不使用多个标签,则可以使用简单的版本,那就是spin.setTag(pos)spin.getTag()不需要的XML文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章