2011-02-23 66 views
0

我正在試圖想出一個可擴展的方式來將兩個編輯文本框鏈接在一起進行單位轉換。用戶將在任何一個框中輸入一個值,轉換後的值將顯示在另一個框中。將兩個EditText框連接起來進行單位轉換

我通常會這樣做,當編輯一個EditText時,它會得到輸入,通過一個方法傳遞它來轉換值並設置其他字段的文本。

問題是我有很多這些對,每對用於轉換不同類型的單位。如果我爲每個盒子使用了一個TextWatcher,你可以看到哪裏會開始失控。

我想過擴展TextWatcher,所以我可以將它傳遞給EditText View及其合作伙伴的視圖,但我不知道如何傳遞它需要使用哪種轉換方法。我可以爲每種轉換分配一個int並使用一個開關,但這對我來說似乎不是一個好的解決方案。

有沒有更好的方法?

回答

0

這就是我該怎麼做的。創建一個類,說PartnerEditTextInfo,它包含一個引用號碼和一個EditText obj。將它作爲標籤附加到您應用中的每個EditText。將PartnerEditTextInfo中的editText設置爲合作伙伴editText並具有唯一的參考號。因此每個EditText都可以獲得對其合作伙伴的控制權。

擴展EditText類並通過onTextChanged()方法調用通用轉換方法(這可以是靜態類靜態方法)。您可以通過獲取其文本已更改的editText的標記對象來獲取合作伙伴editText。然後,基於哪些editText對(基於參考編號)被更改,應用所需的轉換公式,並在對中的兩個editText上執行setText。

注意 - 您需要有一種方法來確保您不會進入無限循環,並有某種標誌來區分editText文本由用戶製作的和由轉換方法所做的更改。

+0

謝謝,我會試試看。 – Matt 2011-02-24 01:08:07

+0

我最終使用了你建議的標籤。該標記存儲editText的單位,夥伴和最小/最大值以及用於格式化的字符串值。我有一個方法將所有內容分配給edittext,包括上面和它的監聽器。監聽器調用轉換方法,該方法根據輸入單元讀取editText的標籤和開關。開關選擇適當的方法進行轉換,如footTo(輸入,單位),並且該方法根據它轉換的單位進行切換。然後convert方法設置值並且每個人都很高興。謝謝您的幫助! – Matt 2011-03-02 05:08:24