在Android中,如何为Spinner设置错误消息?

49

我希望能够像在TextView上设置setError一样,调用如下代码:

spinner.setError("Error message");

然而,setError仅适用于EditText,不适用于Spinner。

如果Spinner字段未被选中,我想通知用户。我该如何进行此类通知而不使用Toast


SetError方法在Spinner中不可用。您需要创建其他函数或Toast消息来显示它。 - zyonneo
4个回答

89
在这个主题讨论中有几种解决方案,Creating a setError() for the Spinner: EdmundYeung99的方法对我有效,无论您是使用自己的适配器还是不使用。只需将以下代码放入您的验证函数中即可:
TextView errorText = (TextView)mySpinner.getSelectedView();
errorText.setError("");
errorText.setTextColor(Color.RED);//just to highlight that this is an error
errorText.setText("my actual error text");//changes the selected item text to this

但是,在进行验证时,请确保Spinner适配器中至少有一个值。如果没有,就像等待填充的空适配器一样,请让您的适配器获取一个空字符串:

但是,请确保在进行验证时,Spinner适配器中至少有一个值。如果没有,则类似于等待填充的空适配器,使适配器获得空字符串:

ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, new String[]{""});
mySpinner.setAdapter(adapter);

这对我来说完美地解决了问题。花了几个小时寻找方法,这是最好的解决方案。 - user2029541
谢谢,很高兴能帮到你! - Lionel T.
运行得很好,谢谢。 - Parth Anjaria
1
只要 getSelectedView() 不返回 null,就可以正常工作。 - Javier Mendonça
1
这就是为什么我添加了以下内容:“但是,在进行验证时,请确保Spinner适配器中至少有一个值。如果没有,就像一个等待填充的空适配器一样,请让您的适配器获取一个空字符串。” - Lionel T.
它只对第一个操作起作用,但如果我在旋转器或文本视图仍显示错误消息时再次验证,它将不起作用! @LionelT. - MNFS

42

当你使用getSelectedView()时,Spinner类将返回一个TextView。因此,您可以间接使用setError()

((TextView)spinner.getSelectedView()).setError("Error message");

结果应该像这样...

spinner中的setError

希望它会有所帮助!


2
非常好的想法,但如果没有选择任何项目,它会出错,此时它会返回 null。 - Javier Mendonça
1
解决方案并不是要满足所有情况。可能还有其他几种条件和用例。这取决于您如何使用此片段。 :) - User
这只是显示旋转器上出现错误,而不暗示错误是什么... - marienke
我刚刚指出了如何使用setError()与Spinner。即使您也知道,设置错误不是显示Spinner错误的好方法。我只是回答了问题。如果您真的想立即显示消息,那么为什么不请求焦点呢! - User

3

3

针对正在寻找 Kotlin 答案的人

val errorText = spinnerclient.selectedView as TextView
                errorText.error = "client required"
                errorText.requestFocus()
                return@setOnClickListener

焦点已返回,但文本没有显示。一旦它被显示出来,我会进行更新。


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