如何在Android Spinner上覆盖onClick?

5

当点击一个普通的Android Spinner 时,会弹出一个选项列表。我想要重写它的onClick方法。当用户在某些错误状态下点击Spinner时,我希望显示一个错误信息而不是弹出选择列表。目前,我只能设置一个OnClickListener,但它的onClick方法不能阻止选项列表的出现。

3个回答

5
尝试设置一个onTouchListener,在onTouch方法中显示您的弹出窗口并返回true以消耗事件并阻止其传播到视图(在此情况下为Spinner)。
spinner.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
   // display your error popup here
   return true;
   }
});

这应该可以防止“下拉列表”出现。

编辑:忘记提到您也可以在onTouch方法中进行错误状态检查,以便您不完全禁用下拉列表。


1
编辑下面的备注是我最终采用的。在不同状态下,最小干扰以获得一些跨片段控制限制。 - James

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
   }
}

更多详细信息请查看来源。希望这可以帮助。


0
我会尝试创建一个MySpinnerAdapter类,实现SpinnerAdapter接口。在你的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;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接