我有一个带有适配器的旋转器.
我在开始活动时使用值列表初始化微调器.
然后我强制选中的值是我管理的对象中使用的值.
屏幕初始化后:
当用户在微调器中选择一个值时,根据所选值,我可以继续(或不)继续(或不)另一个活动,让用户选择一个补充和必要的值.
如果用户“取消”第二个活动,我想将微调器回滚到其先前选择的值,并取消在此期间进行的某些 *** 作.
如果用户走到第二个活动的末尾,一切都很好,我希望juste用第二个活动中选择的数据刷新微调器显示(我重载适配器中的getVIEw方法来执行此 *** 作).
总的来说,我可以轻松地完成所有这些 *** 作,但是,当我在活动开始时强制旋转器中的选定值,或者通过“取消”从第二个活动返回时,更改值事件被捕获,第二个活动被触发(用户根本没有点击任何内容).
只有当微调器中所选值的更改是由用户的手动 *** 作引起时,你才会允许第二个活动被激活,并且当spinner的值被改变时阻止同一个第二个活动被启动“代码“?
我尝试了很多解决方案,因为在适配器中设置一个布尔值,告诉我是否会因为“在代码中” *** 作而引发下一个事件.
或者在适配器中放置一个布尔值,告诉适配器是否已经初始化,并且我在forst change catched事件上强制将该布尔值设置为true.
但没有什么能真正起作用的.
谢谢您的帮助.
奥利弗
@H_419_4@@R_301_6120@ 我总是用布尔标志来解决这个问题,它根本不是很漂亮,但是如果你认为它可以工作的话.这个想法或多或少,创建一个全局可用的boolean和init with false,在onSelectedItemListener()中使用boolean来选择是否触发动作,重要的是要记住在计算机具有之后将其设置为true第一次自动选择它,并在onResume()方法中将其重置为false.
这不是完美的,但它应该工作.
编辑:
bool spinnerUsable1;bool spinnerUsable2;int positionSpinner;public voID onCreate(Bundle savedInstanceState){ spinnerUsable1 = false; spinnerUsable2 = true; if(savedInstanceState != null){ positionSpinner = savedInstanceState.getInt("posspinner"); if(positionSpinner != 0) spinnerUsable2 = false; } //Declare your spinner,set the on item selected Lister spinner.setonItemSelectedListener(new OnItemSelectedListener() { @OverrIDe public voID onItemSelected(AdapterVIEw<?> arg0,VIEw arg1,int arg2,long arg3) { boolean spinnerUsable = (spinnerUsable1 && spinnerUsable2); if (!spinnerUsable1) { spinnerUsable1 = true; } else if (!spinnerUsable2) { spinnerUsable2 = true; } if (spinnerUsable) { //Action; } } @OverrIDe public voID onnothingSelected(AdapterVIEw<?> arg0) { // nothing } });}
这样的事情应该有效.
@H_419_4@ @H_419_4@ @H_419_4@ @H_419_4@ 总结以上是内存溢出为你收集整理的Android – Spinner:我如何在OnItemSelectedListener中区分用户的 *** 作和计算机的 *** 作全部内容,希望文章能够帮你解决Android – Spinner:我如何在OnItemSelectedListener中区分用户的 *** 作和计算机的 *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)