2011-02-08 68 views
3

我有一個編輯文本。我想在其中輸入小數值。DecimalFormat問題拋出StackOverFlowError?

即我輸入第一個數字。它應該是這樣的:.01

然後我輸入第二個數字。它應該是這樣的:.12

然後是第三個。它應該是這樣的:1.23

它會走這樣....如何在Android平臺中實現這個場景。任何想法?

編輯:

我試圖this.But我有當我追加串入的EditText中的StackOverflowError。我已張貼下面我的代碼:

amount.addTextChangedListener(new TextWatcher() { 
      public void afterTextChanged(Editable s) { 
       try { 
        if (s.length() == 1) { 
         Float f = Float.parseFloat(s.toString())/100; 
         System.out.println(String.valueOf(f)); 
         amount.setText(""); 
         amount.append(String.valueOf(f));//getting stackoverflow error here 
        } else if (s.length() > 1) { 
         String str = s.toString().replace(".", ""); 
         Float f = Float.parseFloat(str)/100; 
         System.out.println(String.valueOf(f)); 
         amount.setText(""); 
         amount.append(String.valueOf(f)); 
        } 
       } catch (Exception e) { 

       } 
      } 

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

      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
      } 
     }); 
+0

@DroidBase:您在使用哪種技術? Andriod的?搖擺? JSP/HTML?或任何其他?你的問題需要更多解釋。 – 2011-02-08 07:16:53

+0

我正在使用Android平臺中的edittext。 – Praveen 2011-02-08 07:17:31

回答

1

看,要實現一個元素,在其中您更改元素文本TextChangedKListener。

所以,在這個行

amount.setText(""); 
amount.append(String.valueOf(f)) 

您TextWatcher實現被調用(你可以看到herehere)。

,你可以在第二個鏈接上看到,爲afterTextChanged方法的API文檔,會警告你進入無限循環的風險:

要小心,不要讓自己陷入死循環,因爲你所做的任何更改將導致再次調用此方法遞歸

afterTextChanged描述,在TextWatcher API文檔,建議一種變通方法與此處理:

由於其他的afterTextChanged() 方法可能已經使其他 更改並使失效無效,所以您不會被告知更改需要更改 的位置。 但是如果你需要知道這裏,可以 使用setSpan(對象,INT,INT,INT)在 onTextChanged(CharSequence的,INT,INT, INT)來標記你的地方,再看看 從這裏阿凡達跨度結束了