让我们采取以下简化测试案例:
activity_main.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:id="@android:id/button1"/>
</LinearLayout>
MainActivity.xml
:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView text1 = (TextView) findViewById(R.id.text1);
final TextView text2 = (TextView) findViewById(R.id.text2);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
text1.setError("error");
text2.setError("error");
}
});
}
}
我遇到以下问题:TextView.setErrorText()
的文档说明当任何关键事件导致TextView
发生更改时,错误消息和图标都会被清除。但在此示例中,仅清除了第二个窗口小部件,第一个窗口小部件未更改。
答案 0 :(得分:2)
文档非常明确:
public void setError (CharSequence error)
&#34;将TextView的右手复合drawable设置为&#34; error&#34;图标并设置一个错误消息,当TextView具有焦点时,该消息将显示在弹出中。 &#34;
当您的应用执行时,您的EditText
之一会收到焦点。另一个是未聚焦的,因此,不显示错误文本。这就是你问题的答案。
顺便说一下,混合命名空间真的不是一个好习惯:android.R。*(@ android:)和R。(@ id / *)。这可能会导致您的应用程序在不久的将来几乎无法跟踪错误。