如何覆盖Android Spinner上的onClick?

JoJ*_*oJo 5 android

一个普通的Android Spinner会在点击时弹出一个选项列表.我想覆盖这个onClick.当用户在某些错误状态期间单击微调器时,我想显示错误消息而不是弹出选项列表.目前,我所能做的只是设置一个OnClickListener,但它的onClick方法不允许我阻止显示选项列表.

Fla*_*vio 5

从 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
   }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅来源。希望这可以帮助。


Ton*_*han 5

尝试设置a onTouchListener并在onTouch方法中显示弹出窗口并返回true以使用该事件并阻止它传播到视图(在本例中为Spinner).

spinner.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
   // display your error popup here
   return true;
   }
});
Run Code Online (Sandbox Code Playgroud)

这应该会阻止"下拉列表"出现.

编辑:忘了提及你也可以在onTouch方法中进行错误状态检查,所以你不要完全禁用微调器.


Ent*_*eco 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)