应用程序获取冻结whete设置double值使用打字机编辑文本2个编辑文本

时间:2017-10-22 11:43:36

标签: android android-edittext typewriter

我正在开发应用程序,我希望将货币值从一个更改为另一个,就像我有2个edittext。一个用于输入美元货币,另一个用于输入欧元货币。 现在我想在1个edittext中输入值,计算出的值应显示在其他编辑文本框的其他编辑文本框中。

 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);

功能在这里:

   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("");
    }

    }
}

1 个答案:

答案 0 :(得分:2)

这是因为你获得了无限循环。

amount2ET.setText将切换另一个“afterTextChanged”让你重复并重复调用Start_Calculate。

您应该在设置文本

之前删除侦听器
 amountET.removeTextChangedListener(inputTextWatcher)

             try
             {
             amountET.setText(""+total);//_amount_to_send);
             }
             catch(Exception e) 
             { 
                Log.e("Error in Calculate-2: ",""+e.getMessage());
                }

 amountET.addTextChangedListener(inputTextWatcher);

或者您可以在更新时将全局标志设置为true,这样您就可以解除另一个Start_Calculate:

boolean updating = false;

public void afterTextChanged(Editable s) 
        { 

            try { 
               if (!updating)
                Start_Calculate(""+s.toString());
                } 
                 catch (NumberFormatException nfe) 
                { //or whatever exception you get
                }
                      //do some handling if you need to



        }

Inside Start_Calculate:

updating = true;

         try
         {
         amountET.setText(""+total);//_amount_to_send);
         }
         catch(Exception e) 
         { 
            Log.e("Error in Calculate-2: ",""+e.getMessage());
            }


updating = false;