正常的android Spinner会在点击时弹出一个选项列表。我想覆盖这个onClick。当用户在某些错误状态期间单击微调器时,我想显示错误消息而不是弹出选项列表。目前,我所能做的只是设置OnClickListener,但其onClick方法不允许我阻止显示选项列表。
答案 0 :(得分:5)
尝试设置onTouchListener
并在onTouch
方法中显示您的弹出窗口并返回true
以使用该事件并阻止它传播到视图(在本例中为Spinner)。 / p>
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// display your error popup here
return true;
}
});
这应该会停止显示“下拉列表”。
编辑:忘了提及您也可以在onTouch
方法中执行错误状态检查,因此您不会完全禁用微调器。
答案 1 :(得分:4)
从Spinner扩展并覆盖performClick(),如下所示:
@Override
public boolean performClick() {
if(errorOccured) {
// show validation message
return true; // the event is handled by ourselves
}
else {
return super.performClick(); // show spinner dialog
}
}
有关详细信息,请参阅来源。希望这会有所帮助。
答案 2 :(得分:0)
我会尝试创建一个实现SpinnerAdapter的MySpinnerAdapter类。在MySpinnerAdapter中,查看getDropDownView方法。我相信这就是创建弹出视图的地方。你可以检查你的错误状态,并决定在那里返回一个不同的视图(尽管它可能在另一个函数中 - >检查文档)...
无论如何,这个答案不是复制粘贴的答案。只是想吐一些新想法
public class yourActivity extends Activity
{
private class MySpinnerAdapter implements SpinnerAdapter
{
// There are quite a lot of methods you need to implement...
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
// Check your error states here
if(<we have some kind of error>)
return specialErrorView // you get the idea
// return the default view with options
return normalView;
}
}
}