Android-Spinner:我如何区分用户';来自计算机的操作';s在OnItemSelectedListener中的操作
我在管理纺纱机方面遇到了麻烦,我可以请你帮忙吗 我有一个带转接器的旋转器。 启动活动时,我使用值列表初始化微调器。 然后,我强制所选值成为我管理的对象中使用的值 屏幕初始化后: 当用户在微调器中选择一个值时,根据选择的值,我可以继续(或不继续)到另一个活动,以便让用户选择一个补充和必要的值。 如果用户“取消”第二个活动,我希望将微调器回滚到其先前选择的值,并取消同时执行的一些操作。 如果用户转到第二个活动的末尾,一切正常,我只想用第二个活动中选择的数据刷新微调器显示(为此,我在适配器中重载getView方法) 总的来说,我可以轻松地完成所有这一切,但是,当我在活动开始时在微调器中强制选择值时,或者当通过“取消”从第二个活动返回时,将捕获更改值事件并触发第二个活动(用户根本没有单击任何内容) 仅当微调器中选定值的更改是由于用户的手动操作所致时,您如何允许启动第二个活动,并防止在“代码”中微调器的值更改时启动相同的第二个活动 我尝试了很多解决方案,比如在适配器中设置一个布尔值,告诉它下一个事件是否会因为“in the code”操作而引发。 或者在适配器中放入一个布尔值,告诉适配器是否已初始化自身,然后在forst change catched事件中将该布尔值强制为true。 但没有什么能真正起作用 谢谢你的帮助Android-Spinner:我如何区分用户';来自计算机的操作';s在OnItemSelectedListener中的操作,android,action,listener,spinner,Android,Action,Listener,Spinner,我在管理纺纱机方面遇到了麻烦,我可以请你帮忙吗 我有一个带转接器的旋转器。 启动活动时,我使用值列表初始化微调器。 然后,我强制所选值成为我管理的对象中使用的值 屏幕初始化后: 当用户在微调器中选择一个值时,根据选择的值,我可以继续(或不继续)到另一个活动,以便让用户选择一个补充和必要的值。 如果用户“取消”第二个活动,我希望将微调器回滚到其先前选择的值,并取消同时执行的一些操作。 如果用户转到第二个活动的末尾,一切正常,我只想用第二个活动中选择的数据刷新微调器显示(为此,我在适配器中重载get
Oliver我一直用布尔标志解决这个问题,它一点也不漂亮,但如果你仔细考虑的话,它是有效的 这个想法或多或少是这样的,创建一个全局可用的布尔值并初始化为false,在onSelectedItemListener()中,使用该布尔值选择是否触发该操作,需要记住的重要一点是在计算机第一次自动选择它后将其设置为true,并在onResume()方法中将其重置为false 这并不完美,但它应该可以工作 编辑:
bool喷丝头可使用1;
布尔喷丝头可供2;
微调器;
创建时的公共void(Bundle savedInstanceState){
喷丝头可供1=假;
喷丝头可纺性2=真;
如果(savedInstanceState!=null){
positionSpinner=savedInstanceState.getInt(“posSpinner”);
如果(positionSpinner!=0)spinnerUsable2=false;
}
//声明微调器,在选定列表器上设置项目
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
布尔spinnerUsable1=(spinnerUsable1&&spinnerUsable2);
如果(!spinnerUsable1){
喷丝头可供1=真;
}如果(!spinnerUsable2){
喷丝头可纺性2=真;
}
if(喷丝头可用){
//行动;
}
}
@凌驾
未选择公共无效(AdapterView arg0){
//没什么
}
});
}
像这样的办法应该行。谢谢。你能更精确一点切换布尔值的位置吗?因为如果我只在计算机第一次选择布尔值时(在微调器初始化时)设置它,这似乎不起作用。这就是我在微调器适配器中使用布尔值所做的尝试。当我调用setSelection(或接近:-)强制设置微调器值时,仍然会触发微调器事件,在这种情况下,我看不到基于布尔值的(ou)解决方案如何显示它不是用户交互。
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
}
});
}