2012-01-18 1 views
1

Привет всем Я последовал следующий пример http://www.google.com/codesearch#search/&q=NumberFormattingTextWatcher&exact_package=android&type=cstextChangedMethod для нескольких коробок EditText

У меня есть CurrencyTextWatcher как отдельный класс. Мне это нужно, поскольку я буду применять несколько страниц. Я не могу понять, почему, но если я использую setContentView (текст), он будет работать только в 1 большом текстовом поле, после чего я не могу увидеть остальную часть моего 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

+0

Я не уверен, как получить txta для использования currencytxtwatcher, если я поместил в него текст содержания, но все остальное заблокировано. – Calvin

+0

Обновлен исходный вопрос, поэтому было более ясно, что я думаю об этом. – Calvin

ответ

1

Я взял ваш код. Я заметил, что код, который вы разделили здесь, получает все представления из xml. В этом случае вы звоните

text.addTextChangedListener(new CurrencyTextWatcher()); 

в вашем OnCreate метод, в котором текст делается с помощью Java. Вы не получите обратный вызов для ваших onTextChanged, beforeTextChanged или afterTextChanged, потому что все ваши представления взяты из xml. Поэтому, пожалуйста, после того, как ваш

initControls(); 

в OnCreate() добавьте ниже линии

txta.addTextChangedListener(new CurrencyTextWatcher()); 

и комментарии

text.addTextChangedListener(new CurrencyTextWatcher()); 

, что линия не требуется. Я проверил его работоспособность.

если работа проголосовать и принять ответ

+0

Арун Ты чертова звезда! Спасибо, что потратили время, чтобы объяснить это мне, теперь я понимаю, чего не хватает.Я очень ценю это, и это работает как шарм! Извините, у меня нет достаточно высокой репутации, чтобы проголосовать. – Calvin

0

что код, который вы реализовали в afterTextChanged, реализует то же самое для onTextChanged. Он будет стрелять и отзывается.

Во-вторых, если в представлениях есть проблема, проверьте свой макет и их параметры. если он не является правильным, он не будет отображаться должным образом в пользовательском интерфейсе

+0

Я добавил, что код в измененном тексте по-прежнему не работает. Я не могу понять это. Трудно представить, я не могу найти пример, похожий на то, что я делаю, это, по-видимому, контекстный взгляд, но я не могу найти ничего плохого в xml. Как я сказал в вопросе о контексте. – Calvin

+0

Кто-нибудь еще когда-либо делал это? Представьте себе, что это может быть? – Calvin

Смежные вопросы