2011-02-08 66 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)来标记你的地方,再看看 从这里阿凡达跨度结束了