0

Ich habe ein Fragment mit 3 bearbeiten Texte und 1 Textansicht. Ich möchte Eingaben von diesen Texten erhalten. aber es schließt sich. Was ist das Problem? mein Code:erhalten Wert von Text bearbeiten und einige Berechnungen

View view = inflater.inflate(R.layout.bmi_fragment, 
      container, false); 
    EditText age = (EditText) view.findViewById(R.id.editText_age); 
    EditText weight = (EditText) view.findViewById(R.id.editText_weight); 
    EditText height = (EditText) view.findViewById(R.id.editText_height); 
    int age_value = Integer.parseInt(age.getText().toString()); 
    int weight_value = Integer.parseInt(weight.getText().toString()); 
    int height_value = Integer.parseInt(height.getText().toString()); 
    int calc = (weight_value/((height_value/100) * (height_value/100))); 
    TextView dd = (TextView) view.findViewById(R.id.result_bmi_textView); 
    dd.setText(calc); 
+1

Problem ist in 'dd.setText (ber hinzufügen); 'line use' dd.setText (String.valueOf (calc)); 'um' int' in TextView anzuzeigen und auch Werte von EditText für jedes Ereignis wie beim Klicken zu erhalten of button sonst 'Integer.parseInt' throw' NumberFormatException 'wenn value wenn leer return by getText() Methode von EditText –

+0

irgendwelche Daten haben Sie int editext gesetzt? – Cgx

+0

@ ρяσѕρєяK es wieder Kraft schließt – zorer

Antwort

1

hinzufügen Steuerung für leere EditText

View view = inflater.inflate(R.layout.bmi_fragment, 
     container, false); 
EditText age = (EditText) view.findViewById(R.id.editText_age); 
EditText weight = (EditText) view.findViewById(R.id.editText_weight); 
EditText height = (EditText) view.findViewById(R.id.editText_height); 
try { 
     int age_value = Integer.parseInt(age.getText().toString()); 
     int weight_value = Integer.parseInt(weight.getText().toString()); 
     int height_value = Integer.parseInt(height.getText().toString()); 
     int calc = (weight_value/((height_value/100) * (height_value/100))); 
     TextView dd = (TextView) findViewById(R.id.textView); 
     dd.setText(calc+""); 
} catch (Exception e){ 
    //Textfield empty 
} 
1

Verwendung setText(), wie die

View view = inflater.inflate(R.layout.bmi_fragment, 
      container, false); 
    EditText age = (EditText) view.findViewById(R.id.editText_age); 
    EditText weight = (EditText) view.findViewById(R.id.editText_weight); 
    EditText height = (EditText) view.findViewById(R.id.editText_height); 
    int age_value = Integer.parseInt(age.getText().toString()); 
    int weight_value = Integer.parseInt(weight.getText().toString()); 
    int height_value = Integer.parseInt(height.getText().toString()); 
    int calc = (weight_value/((height_value/100) * (height_value/100))); 
    TextView dd = (TextView) view.findViewById(R.id.result_bmi_textView); 
    dd.setText(""+calc); 
1

Sie verwenden .SetText(). aber Sie passieren int Typ. das ist ein Problem. so müssen Sie Ihre int to String

Try konvertieren wie

dd.setText("Value : " + calc); // concat with String 
dd.setText("" + calc); // concat with empty string 

oder können Sie verwenden Integer.toString(int)

dd.setText(Integer.toString(calc)); 

oder verwenden String.valueOf(int)

dd.setText(String.valueOf(calc)); 

kann dies hilft Ihnen

ohne Knopf: Need TextChangedListener

View view = inflater.inflate(R.layout.bmi_fragment, 
     container, false); 
EditText age = (EditText) view.findViewById(R.id.editText_age); 
EditText weight = (EditText) view.findViewById(R.id.editText_weight); 
EditText height = (EditText) view.findViewById(R.id.editText_height); 
int age_value = Integer.parseInt(age.getText().toString()); 
int weight_value = Integer.parseInt(weight.getText().toString()); 

TextView dd = (TextView) view.findViewById(R.id.result_bmi_textView); 


editText_height.addTextChangedListener(new TextWatcher() 
      { 
       public void afterTextChanged(Editable s) {} 
       public void beforeTextChanged(CharSequence s, int start,int count, int after){} 

       public void onTextChanged(CharSequence s, int start,int before, int count) 
       { 

        int height_value = Integer.parseInt(s.toString());    
        int calc = (weight_value/((height_value/100) * (height_value/100))); 
        dd.setText(calc); 
       } 

      }); 
+0

es noch zwingen schließt, aber wenn ich eine Schaltfläche hinzufügen, um die Berechnung zu tun, wenn die Schaltfläche geklickt wird, funktioniert es. Wie kann ich die Berechnungen starten, ohne Button hinzuzufügen und nur wenn Benutzer edittexts Wert ändert? – zorer

1

Verwendung wie diese

View view = inflater.inflate(R.layout.bmi_fragment, 
     container, false); 
EditText age = (EditText) view.findViewById(R.id.editText_age); 
EditText weight = (EditText) view.findViewById(R.id.editText_weight); 
EditText height = (EditText) view.findViewById(R.id.editText_height); 
int age_value = Integer.parseInt(age.getText().toString()); 
int weight_value = Integer.parseInt(weight.getText().toString()); 
int height_value = Integer.parseInt(height.getText().toString()); 
int calc = (weight_value/((height_value/100) * (height_value/100))); 
TextView dd = (TextView) view.findViewById(R.id.result_bmi_textView); 
dd.setText(String.valueOf(calc)); 
Verwandte Themen