Spinner onItemSelected 被错误调用(无需用户操作)

2024-06-19

我有一个在对话框视图中显示的微调器,对话框开始时onItemSelected叫做。我真的不想处理这个,但只有当用户做出选择时。所以我要么需要阻止这种情况(也许是因为没有设置默认值?),要么我需要知道不是用户在做出此选择?


本着比尔·莫特解决方案的精神,另一个选择是使OnItemSelectedListener还有一个OnTouchListener。然后可以在 onTouch 方法中将用户交互标志设置为 true 并在onItemSelected()一旦处理了选择更改。我更喜欢这个解决方案,因为用户交互标志是专门为微调器处理的,而不是为活动中可能影响所需行为的其他视图处理的。

In code:

为微调器创建监听器:

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 and an OnTouchListener:

SpinnerInteractionListener listener = new SpinnerInteractionListener();
mSpinnerView.setOnTouchListener(listener);
mSpinnerView.setOnItemSelectedListener(listener);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spinner onItemSelected 被错误调用(无需用户操作) 的相关文章

随机推荐