2014-03-13 72 views
2

我是java和android開發的新手,我正在研究通過EditText從用戶處獲取輸入的應用程序。但是,有時候輸入數據會有一些字符的編碼與應用程序所期望的不同。如何高效地編輯Android中的EditText中的文本

我創建了包含所有可能映射(約460個元素)的散列表,並且每當用戶鍵入(或粘貼)某些內容時,我都會使用afterTextChanged方法遍歷文本並將不匹配的編碼與正確顯示正確的。 我的代碼適用於小型條目,但是它的獲取速度越慢,因爲在每次交換後我都會遞歸調用afterTextChanged。當粘貼具有大約30個以上字符且編碼不正確的文本時,應用程序將崩潰。

這裏是我的代碼:

public void afterTextChanged(Editable editable) { 
    substituteText(editable); 
} 

public CharSequence substituteText(Editable txt) { 
    if (txt.length() == 0) { 
     return txt; 
    } 

    for (int i = 0; i < txt.length(); i++) { 
     char ch = txt.charAt(i); 
     CharSequence ret = myHashMap.get(ch); 
     if (ret != null) { 
     txt.replace(i, i + 1, ret); 
     } 
    } 

    return txt; 
} 

我想過克隆「編輯」一些,改變它,然後將它複製回的EditText編輯的變量,因此只能看到它作爲一個改變,但我失敗了做到這一點,因爲我找不到克隆它的簡單方法。

有沒有更有效的方法來做到這一點?

回答

1

如果您使用onTextChanged而不是afterTextChanged,您將傳遞用戶輸入的新字符以及它們的位置,而您只需要檢查這些字符。

+0

但是不是通過onTextChanged傳遞只讀的CharSequence?或者您建議我使用EditText.setText來更改它 –

+1

是的,但是您可以直接在編輯文本中更改相應的位置。或者在這裏保存位置數據並在afterTextChanged中進行實際編輯。 –

+0

它在android文檔中對於「onTextChange」它在最後說:**嘗試從這個回調對s進行更改是錯誤的。這是爲什麼? –

相關問題