我有36个微调器,已经使用一些值进行了初始化。我已经将它们与onItemSelectedListener一起使用。与往常一样,用户可以与这些微调器交互,从而触发onItemSeected函数。
一个问题是该调用是在init期间进行的,但是我在这里找到了解决方案,并且避免了使用全局变量“ count”并在执行onItemSelected内部的代码之前检查count> 36。
我的问题是:用户可以选择单击一个名为“上一个”的按钮,在该按钮上,我必须重置一些微调器值。
我尝试在重置微调器之前将count的值更改为0,然后在重置后将其更改回37,但是我了解到onItemSelected仅在执行完所有其他函数之后才被调用,因此称为AFTER count即使微调器值一经用户选择即被设置,也将更改为37。
我需要反复刷新一些微调器,而无需关闭onItemSelected函数。谁能帮我找到解决方案吗?谢谢。
我找到了一个简单且优雅的解决方案。使用标签。我首先创建了一个名为“ 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] 删除。
我来说两句