2014-08-27 3 views
0

Я использую TextWatcher, чтобы изменить текст EditText во время ввода. Строка добавляет новый/замененный текст в старый текст, а затем отображает его. Я хочу отображать только новый/замененный текст. Я пытаюсь сохранить индекс «предыдущего» текста и отображать только новый текст, который был заменен. Я не уверен, что это правильный способ сделать это, возможно, я делаю это совершенно неправильно, поэтому он дает мне индекс из связанного исключения. Может ли кто-нибудь помочь. Например, я набираю a, и в следующий раз, когда я набираю b, текст, отображаемый в текстовом поле, является aab, а не ab, я хочу удалить эту избыточность. Ниже мой код: А также, как я могу вставить символ новой строки, если символы на линию превышают предел, например, 10, символы после 10 символов должны быть отображением в следующей строкеУказатель Out Of Bound Exception в TextWatcher

tw = new TextWatcher() 
{   
    public void beforeTextChanged(CharSequence s,int start,int count, int after){} 

    public void onTextChanged(CharSequence s, int start, int before, int count) 
    {        
     txtData.removeTextChangedListener(tw); 
     txtData.setText(s.toString().replace("\n", "*")) 
     txtData.addTextChangedListener(tw); 
    } 
}; 
txtData.addTextChangedListener(tw); 
+0

что вы хотите достичь? atm каждое письмо, которое вы пишете, будет обрабатываться индивидуально. Я предполагаю, что вы хотите обрабатывать charsequence в настоящее время в вашем текстовом виде. это будет s. вам не нужно называть getText() на txtData, который является edittext, прикрепленным к тексту, я принимаю –

+0

Спасибо, Дэниэл за ваш ответ. Я внес изменения в свой код в соответствии с вашим предложением, но проблема остается. Я хочу удалить избыточные/повторяющиеся символы и вставить новую строку после n числа символов. Например, если я набираю букву a, она отображается в edittext, но когда я пытаюсь ввести следующую букву, она добавляет предыдущий текст к следующему/новому тексту, например a, а затем aab, а затем aabaabc then aabaabaabc, но я просто хотите, чтобы abc отображался в редакторе, все равно я могу избавиться от избыточного текста? и вставить \ n скажем после 10 символов в edittext? – user2387107

ответ

0

нету я попробовал этот код , поскольку я только что сделал это на текстовом редакторе.

это должно добавить новую строку каждые 10 знаков в текст. im не совсем уверен, считает ли он \ n знаком, поэтому вы можете проверить это. если это действительно так, вам нужно сделать немного сложнее, если блок :)

tw = new TextWatcher() 
{   
    public void beforeTextChanged(CharSequence s,int start,int count, int after){} 

    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
     if (s.toString().length()%10 == 0) {        
      txtData.removeTextChangedListener(tw); 
      txtData.setText(s.toString() + "\n"); 
      txtData.addTextChangedListener(tw); 
     } 
    } 
}; 
txtData.addTextChangedListener(tw); 
+0

СПАСИБО ОЧЕНЬ МНОГО ДАНИЛЕЙ, что он работает сейчас, он переходит в новую строку, но после каждых 9 символов, а не 10 символов, он также повторяет символы (9) первой строки и добавляет новые, пока линия не закончится , Строка может содержать в общей сложности 26 символов, и я хотел бы, чтобы ее ограничивали всего 10. Ваше решение отлично работает, за исключением первой строки и ограничивает строку до 9 символов вместо 10. Любая идея почему? Еще раз спасибо, поскольку вы решили основную проблему. – user2387107

+0

Я просто изменил эту строку ** s.toString(). Length()% 1 == 10) ** с этой строкой ** s.toString(). Length()% 11 == 0) ** и работает для 10 символов. Не уверен, почему первая строка все еще проблема. Это результат ** 123456789- (следующая строка) 678901- (следующая строка) 2345678901- (следующая строка) 2345678901 ... и т. Д. ** – user2387107

+0

Мне нужно было бы сделать проект, чтобы попробовать это сам, на :) –

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