I am developeing app where i want to change the currency value from one to another, Like i have 2 edittext. one for USD Currency to enter and other for EURO currency to enter. Now i want to enter value in 1 edittext and the calculated value should display in other and same for the other edit text box.
TextWatcher inputTextWatcher = new TextWatcher()
{
public void afterTextChanged(Editable s)
{
try {
Start_Calculate(""+s.toString());
}
catch (NumberFormatException nfe)
{ //or whatever exception you get
}
//do some handling if you need to
}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
};
amountET.addTextChangedListener(inputTextWatcher);
TextWatcher inputTextWatcher1 = new TextWatcher() {
public void afterTextChanged(Editable s)
{
try {
Start_Calculate2(""+s.toString());
}
catch (NumberFormatException nfe)
{ //or whatever exception you get
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
};
amount2ET.addTextChangedListener(inputTextWatcher1);
FUNCTION ARE HERE:
public void Start_Calculate(String val)
{
String user_input_value="00.00";
try
{
// user_input_value=""+amountET.getText().toString();
user_input_value=""+val;
}
catch(NumberFormatException e)
{
user_input_value="00.00";
}
//*/
if(!user_input_value.equalsIgnoreCase(""))
{
if(user_input_value.length()<11)
{
try
{
user_amount=Double.parseDouble(""+user_input_value);
}
catch(NumberFormatException e)
{
user_amount=00.000;
}
if(user_amount>0)
{
user_amount=user_amount*1.0000001;
total_amount_to_send=((user_amount*to_amount_val)/from_amount_val);
// total_amount_to_send= total_amount_to_send+00.0000;
//String total=new DecimalFormat("##.##").format(total_amount_to_send);
// totalTV.setText(user_amount+" "+fromTV.getText().toString()+" = "+ total+" ("+toTV.getText().toString()+")");
// totalTV.setText(user_amount+" = "+ total);
// String finalVal= df.format(target_currency_val);
//total_calTV.setText("( "+user_amount+" × "+df.format(to_amount_val) +" = "+ total+" )");
String total="00.00";
DecimalFormat df = new DecimalFormat("#.####");
total=""+df.format(total_amount_to_send);
try
{
amount2ET.setText(""+total);//_amount_to_send+"");
}
catch(Exception e)
{
Log.e("Error in Calculate1: ",""+e.getMessage());
}
//showtoast(""+total);//_amount_to_send);
//usdTV.setText(""+user_amount+" ("+fromTV.getText().toString()+")");
//pkrTV.setText(""+ total+" ("+toTV.getText().toString()+")");
}
else
{
}
}
else
{
}
}
}
public void Start_Calculate2(String val)
{
//String user_input_value="0";
//String user_input_value=""+val;
String user_input_value="0";
try
{
//user_input_value=""+amount2ET.getText().toString();
user_input_value=val;
}
catch(NumberFormatException e)
{
user_input_value="00.00";
}
//*/
if(!user_input_value.equalsIgnoreCase(""))
{
if(user_input_value.length()<11)
{
try
{
user_amount=Double.parseDouble(""+user_input_value);
}
catch(NumberFormatException e)
{
user_amount=00.00;
}
if(user_amount>0)
{
user_amount=user_amount*1.0000001;
total_amount_to_send=((user_amount*from_amount_val)/to_amount_val);
// total_amount_to_send= total_amount_to_send+00.0000;
//String total=new DecimalFormat("##.##").format(total_amount_to_send);
// totalTV.setText(user_amount+" "+toTV.getText().toString()+" = "+ total+" ("+fromTV.getText().toString()+")");
// totalTV.setText(user_amount+" = "+ total);
//DecimalFormat df = new DecimalFormat("#.##");
// String finalVal= df.format(target_currency_val);
//total_calTV.setText("( "+user_amount+" × "+df.format(to_amount_val) +" = "+ total+" )");
String total=new DecimalFormat("##.##").format(total_amount_to_send);
try
{
amountET.setText(""+total);//_amount_to_send);
}
catch(Exception e)
{
Log.e("Error in Calculate-2: ",""+e.getMessage());
}
//showtoast(""+total);//_amount_to_send);
//usdTV.setText(""+user_amount+" ("+fromTV.getText().toString()+")");
//pkrTV.setText(""+ total+" ("+toTV.getText().toString()+")");
}
else
{
//totalTV.setText("");
//total_calTV.setText("");
}
}
else
{
//totalTV.setText("");
//total_calTV.setText("");
}
}
}
It is because you get infinite loop.
amount2ET.setText will toggle another "afterTextChanged" let you repeat and repeat call of Start_Calculate.
You should remove the listener before set the text
Or you can set a global flag true when updating so you can dismiss another Start_Calculate:
Inside Start_Calculate: