2013-09-25 3 views
0

Я пытаюсь это сделать, но получаю «Ошибка переполнения стека», поэтому я принял совет и пришел сюда, чтобы найти помощь.Предел Длина текста EditText

Я хочу, чтобы ограничить длину текста пользователь может вставить, поэтому, когда он типа персонажа выше предела длины характер стирается

sms_input.addTextChangedListener(new TextWatcher(){ 

     @Override 
     public void afterTextChanged(Editable s) { 

      String cs = sms_input.getText().toString(); 
      if (cs.length() > 160) { sms_input.setText(cs.substring(0, MAX_MSG_LENGTH + 1)); } 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      // TODO Auto-generated method stub 

     } 

    }); 

Logcat:

09-25 17:07:34.972: E/AndroidRuntime(22733): FATAL EXCEPTION: main 

09- 25 17: 07: 34.972: E/AndroidRuntime (22733): java.lang.StackOverflowError 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.graphics.Paint.getTextRunAdvances (Paint.java:1754) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.gr aphics.Paint.getTextRunAdvances (Paint.java:1720) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.text.MeasuredText.addStyleRun (MeasuredText.java:164) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.text.MeasuredText.addStyleRun (MeasuredText.java:204) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.text.StaticLayout. генерировать (StaticLayout.java:281) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.text.DynamicLayout.reflow (DynamicLayout.java:284) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.text.DynamicLayout. (DynamicLayout.java:170) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.makeSingleLayout (TextView.java : 5986) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.TextView.makeNewLayout (Te xtView.java:5884) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.checkForRelayout (TextView.java:6423) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3696) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java: 3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733) : at android.widget.TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray. lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17 : 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): при ndroid.widget.TextView.setText (TextView.java:3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray. lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17 : 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java: 3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17: 07: 34.972: E/AndroidRuntime (22733)): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3554) 09-25 17:07 : 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17:07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.Text View.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17 : 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.TextView .setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3554) 09-25 17: 07: 34.972 : E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.TextView.setText (TextView .java: 3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget. TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java:211) 09-25 17 : 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView. java: 3554) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.EditText.setText (EditText.java:80) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.setText (TextView.java:3529) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at com.easyray.lemon.SmsChat $ 5.afterTextChanged (SmsChat.java : 211) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): at android.widget.TextView.sendAfterTextChanged (TextView.java:7247) 09-25 17: 07: 34.972: E/AndroidRuntime (22733)): at android.widget.TextView.setText (TextView.java:3703) 09-25 17: 07: 34.972: E/AndroidRuntime (22733): на android.widget.TextView.SetText (TextView.java:3554) 09-25 17: 07: 34,972: E/AndroidRuntime (22733): в android.w

+0

Не могли бы вы дать описание вашей проблемы вместе с кодом? – Swayam

+0

сделал это, я, должно быть, случайно удалил его – codareee

+0

Какая ошибка вы получаете? «Ошибка переполнения стека»? В самом деле? Можем ли мы увидеть ваш LogCat? – Swayam

ответ

4

Вы не хотите делать все эти. Просто попробуйте это в XML

android:maxLength="120" 

При попытке ввести более 120 символов это просто заблокирует вас от ввода следующего символа.

Я думаю, что это то, что вы ищете. Просто оставьте это, если нет.

+0

спасибо, это сработало! – codareee

+1

рад узнать @codareee ... – arjunkn

3

Этот же вопрос уже отвечал перед тем, например, здесь (TextWatcher afterTextChanged causes stackoverflow in android)

Но в основном происходит то, что вы меняете текст внутри метода «afterTextChanged», и это вызывает метод, который будет вызываться снова, поэтому возникает бесконечный цикл, заканчивающийся исключением StackOverflow :)

+0

Во-первых, +1 для предоставления приятного объяснения. Мне интересно, как это решить. Что делать, если проверка была выполнена на 1 меньше, чем maxLength, и когда было установлено, что она достигла этого, метод setText установит строку (которая по-прежнему меньше, чем maxLength), а затем отключит EditText и, возможно, также удалит TextWatcher связанные с ним? – Swayam

+1

Одним из возможных решений может быть удаление наблюдателя с помощью «removeTextChangedListener», установка текста и повторное добавление слушателя. –

+0

есть ли другой способ получить тот же эффект? возможно, подход неправильный. Было бы полезно, если бы я мог заставить textwatcher не вызывать ontextchanged, если длина> max_lenght – codareee

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