如何覆盖Android Spinner上的onClick?

时间:2011-12-08 23:16:56

标签: android

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

3 个答案:

答案 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;
        }
    }
}