Android – Spinner:我如何在OnItemSelectedListener中区分用户的 *** 作和计算机的 *** 作

Android – Spinner:我如何在OnItemSelectedListener中区分用户的 *** 作和计算机的 *** 作,第1张

概述我在管理一个微调器时遇到了麻烦,所以我可以请求你的帮助吗? 我有一个带有适配器的旋转器. 我在开始活动时使用值列表初始化微调器. 然后我强制选中的值是我管理的对象中使用的值. 屏幕初始化后: 当用户在微调器中选择一个值时,根据所选值,我可以继续(或不)继续(或不)另一个活动,让用户选择一个补充和必要的值. 如果用户“取消”第二个活动,我想将微调器回滚到其先前选择的值,并取消在此期间进行的某些 *** 作. @H_419_4@ 我在管理一个微调器时遇到了麻烦,所以我可以请求你的帮助吗?

我有一个带有适配器的旋转器.
我在开始活动时使用值列表初始化微调器.
然后我强制选中的值是我管理的对象中使用的值.

屏幕初始化后:
当用户在微调器中选择一个值时,根据所选值,我可以继续(或不)继续(或不)另一个活动,让用户选择一个补充和必要的值.
如果用户“取消”第二个活动,我想将微调器回滚到其先前选择的值,并取消在此期间进行的某些 *** 作.
如果用户走到第二个活动的末尾,一切都很好,我希望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中区分用户的 *** 作和计算机的 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1128236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存