我有一个在对话框 View 中显示的微调器,并且在对话框开始时调用 onItemSelected
。我真的不想处理这个,但只有当用户做出选择时。所以我要么需要阻止这种情况(可能是因为没有设置默认值?),要么我需要知道不是用户在做这个选择?
最佳答案
Bill Mote 解决方案精神的另一个选择是使 OnItemSelectedListener
也成为 OnTouchListener
。然后可以在 onTouch 方法中将用户交互标志设置为 true,并在处理了选择更改后在 onItemSelected()
中重置。我更喜欢这个解决方案,因为用户交互标志是专门为微调器处理的,而不是为 Activity 中可能影响所需行为的其他 View 处理。
在代码中:
为微调器创建监听器:
public class SpinnerInteractionListener implements AdapterView.OnItemSelectedListener, View.OnTouchListener {
boolean userSelect = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
userSelect = true;
return false;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (userSelect) {
// Your selection handling code here
userSelect = false;
}
}
}
将监听器作为 OnItemSelectedListener
和 OnTouchListener
添加到微调器:
SpinnerInteractionListener listener = new SpinnerInteractionListener();
mSpinnerView.setOnTouchListener(listener);
mSpinnerView.setOnItemSelectedListener(listener);
关于android - Spinner onItemSelected 被错误调用(没有用户操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124835/