2012-01-18 32 views
1

大家好我也跟着下面的例子http://www.google.com/codesearch#search/&q=NumberFormattingTextWatcher&exact_package=android&type=cstextChangedMethod爲多的EditText框

我有CurrencyTextWatcher作爲一個單獨的類。我需要這個,因爲我會申請幾個頁面。 我不明白爲什麼,但如果我使用setContentView(文本)它將作爲只有一個大的文本框,然後我看不到我的XML的其餘部分。
如果我使用setContentView(R.layout.main);我的XML正常工作除了TextWatcher不會火我txta的EditText框

的Java

public class CalcTestActivity extends Activity { 
    private EditText txta; 
    private TextView txtb; 
    private TextView txtc; 
    private EditText text; 

    private double a = 0; 
    private double b = 0; 
    private double c = 0; 

    private Button buttonCalc; 

    /** Called when the activity is first created. */ 
    @Override 


public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      initControls(); 
      text = new EditText(this); 
      text.addTextChangedListener(new CurrencyTextWatcher()); 
    //setContentView(text); 
     } 

     private String FormatValue(double value) 
     { 
      NumberFormat nf = NumberFormat.getInstance(); 
      return "$ "+ nf.format(value); 
     } 

     private void initControls() { 

      txta = (EditText)findViewById(R.id.txta); 
      txtb = (TextView)findViewById(R.id.txtb); 
      txtc = (TextView)findViewById(R.id.txtc); 

      buttonCalc = (Button)findViewById(R.id.buttonCalc); 
      buttonCalc.setOnClickListener(new Button.OnClickListener() { 

      public void onClick(View v) {calculate(); } 

      private void calculate() { 

      a=Double.parseDouble(txta.getText().toString()); 

      b=Math.round(a*.88);     
      txtb.setText(FormatValue(b)); 

      c=Math.round((a*.87)-(b*.28)); 
      txtc.setText(FormatValue(c)); 
      } 

     }); 
     } 
    } 

CurrencyTextWatcher類

public class CurrencyTextWatcher implements TextWatcher { 

boolean mEditing; 

public CurrencyTextWatcher() { 
    mEditing = false; 
} 

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    if(!mEditing) { 
     mEditing = true; 

     String digits = s.toString().replaceAll("\\D", ""); 
     NumberFormat nf = NumberFormat.getCurrencyInstance(); 
     try{ 
      String formatted = nf.format(Double.parseDouble(digits)/100); 
      s.replace(0, s.length(), formatted); 
     } catch (NumberFormatException nfe) { 
      s.clear(); 
     } 

     mEditing = false; 
    } 
} 
public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 
    // TODO Auto-generated method stub 

} 

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub 

} 

}

XML

<TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Number1" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/txta" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" android:numeric="integer"/> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Number2" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/txtb" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Your Answer is" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/txtc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:hint="0" /> 

    <Button 
     android:id="@+id/buttonCalc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Calculate" /> 

</LinearLayout> 
+0

你在這裏提供的代碼是好的。但如果你能更詳細地闡述你的問題,它還是很好,但不清楚 – amandroid 2012-01-18 03:06:39

+0

我不確定如何獲得txta來使用currencytxtwatcher,如果我把內容視圖文本放進去,但其他所有東西都被阻塞了。 – Calvin 2012-01-18 03:13:31

+0

更新了原來的問題,以便更清楚我認爲的問題。 – Calvin 2012-01-18 18:58:15

回答

1

我把你的代碼。我觀察到你在這裏分享的代碼是從XML獲取所有視圖。 在這種情況下,你在你的onCreate方法調用

text.addTextChangedListener(new CurrencyTextWatcher()); 

,其中文本是用java完成。你不會爲你的onTextChanged,beforeTextChanged或afterTextChanged回調,因爲你的所有視圖都是從xml中獲取的。所以,請你以後

initControls(); 
中的onCreate

()下面添加行

txta.addTextChangedListener(new CurrencyTextWatcher()); 

和評論

text.addTextChangedListener(new CurrencyTextWatcher()); 

不需要該行。我已驗證其工作正常。

如果作品進行投票,並接受了答案

+0

阿倫你是一個該死的明星!感謝您抽出時間向我解釋,我現在明白我錯過了什麼。我真的很感激它,它的作用像一個魅力!對不起,我沒有足夠的代表投票了。 – Calvin 2012-01-20 17:02:21

0

你在afterTextChanged中實現的代碼爲onTextChanged實現了相同的內容。它會觸發並給回電話。其次,如果視圖有問題,請檢查您的佈局和參數。如果它不正確,它不會在UI中正確顯示。

+0

我在ontext中添加了代碼,但仍然無法正常工作。我無法弄清楚這一點。很難想象,我找不到類似於我所做的一個例子,它似乎是contextview,但我在xml中找不到任何錯誤。就像我在上下文中提到的那樣。 – Calvin 2012-01-19 14:04:53

+0

有沒有其他人做過這個?有一個想法可能是什麼? – Calvin 2012-01-20 01:52:34