2017-10-22 1 views
0

私は2つのedittextを持っているように、私は1つから別の通貨の値を変更したいアプリケーションを開発しています。 1つはUSD通貨を入力し、もう1つはEURO通貨を入力するためのものです。 これで、1つのedittextに値を入力すると、計算された値は、他の編集テキストボックスと同じに表示されます。アプリケーションはフリーズを取得するwhete 2つの編集テキストのタイプライターを使用してテキストを編集するダブル値を設定

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はここにある:あなたが無限ループを得るため

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

それはあります。

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

それとも、更新するときに、あなたが別のStart_Calculateを却下することができ、真のグローバルフラグを設定することができます設定リスナーを削除する必要があります。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 



     } 

updating = true; 

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


updating = false; 
関連する問題