2014-03-30 6 views
0

Давайте рассмотрим следующую пониженную тестовый случай:EditText ошибка не очищается

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() говорит, что сообщение об ошибке a Значок nd очищается, когда любые события клавиш вызывают изменения в TextView. Но в этом примере очищается только второй виджет, первый не меняется.

ответ

2

документация очень ясно, на нем:

public void setError (CharSequence error)

«Устанавливает правое соединение вытяжку из TextView в„значок ошибки“и устанавливает сообщение об ошибке, которое будет отображаться во всплывающем окне , когда TextView имеет фокус. "

Один из ваших EditText получает фокус, когда ваше приложение выполнено. Другой не сфокусирован, поэтому текст ошибки не отображается. Это ответ на ваш вопрос.

И, кстати, это действительно не очень хорошая практика смешивать пространство имен:. Android.R * (@android: ) и Р. (@ идентификатор/*). Это может привести к едва заметным ошибкам в недалеком будущем вашего приложения.

+0

Но когда я нажимаю на 'EditText', который не очищается и не изменяет его текст, ошибка остается там ... (я не импортировал пакет' android', я просто удалил его в моем примере. .id.text1' теперь находится в моем приложении. :). – WonderCsabo

+0

На моем устройстве ваш выше код работает отлично. Я думаю, проблема связана с остальной частью вашего кода. – Drew

+0

Нет другого кода, я тестировал его только с приведенным ниже примером. Я только заметил, что маркер ошибки очищается, но только тогда, когда весь текст стирается. Это предполагаемое поведение? : S – WonderCsabo

Смежные вопросы