2017-07-10 4 views
-1

Ich entwickle eine Anwendung zum Konvertieren von Werten von kW nach km, ich möchte die Punktzahl in EditText2 sehen, wenn ich den Wert in EditText1 eingegeben habe, ohne eine Schaltfläche zu verwenden, um dies automatisch in der Ansicht zu tun, aber ich habe keine Ahnung Wie macht man das. Im Moment muss ich den richtigen Wert von Spinner auswählen, um das Ergebnis in EditText2 zu erhalten. Wie kann sich das ändern? Vielleicht bin ich auf der Suche nach einem Suchwert vom Spinner? Ich werde Sie auch fragen, wie Sie die Anwendung verbessern können. Vielen Dank.Wie wird das Ergebnis automatisch in EditText angezeigt?

Ich versuche TextWeatcher verwenden, aber es funktioniert immer noch nicht.

MainActivity.java

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 


    Spinner spinner1, spinner2; 
    EditText editText1, editText2; 
    double count = 1.36; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     spinner1 = (Spinner) findViewById(R.id.spinner1); 
     spinner2 = (Spinner) findViewById(R.id.spinner2); 

     editText1 = (EditText) findViewById(R.id.editText1); 
     editText2 = (EditText) findViewById(R.id.editText2); 

     editText1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after){ 
      } 

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

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

       String c = s.toString(); 
       editText2.setText(c); 
      } 
     }); 

     ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this, R.array.przelicznik_arrayKM, 
       android.R.layout.simple_spinner_item); 

     adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spinner1.setAdapter(adapter1); 
     spinner1.setOnItemSelectedListener(this); 


     ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this, R.array.przelicznik_arraykW, 
       android.R.layout.simple_spinner_item); 

     adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spinner2.setAdapter(adapter2); 

     spinner2.setOnItemSelectedListener(this); 

    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

     Spinner spinner = (Spinner) parent; 
     String text = spinner1.getSelectedItem().toString(); 

     String text2 = spinner2.getSelectedItem().toString(); 


     if(text.equals("kW") & text2.equals("KM")) { 

      try { 
       double a = Double.parseDouble(editText1.getText().toString()); 
       double suma = a/count; 

       editText2.setText(String.valueOf(suma)); 

      }catch (NumberFormatException e){ 
       Toast.makeText(this, "Enter yout value!", Toast.LENGTH_SHORT).show(); 
      } 

     } 

     if(text.equals("KM") & text2.equals("kW")){ 

      try { 
       double a = Double.parseDouble(editText1.getText().toString()); 
       double suma = a /count; 

       editText2.setText(String.valueOf(suma)); 

      }catch (NumberFormatException e){ 
       Toast.makeText(this, "Enter your value!", Toast.LENGTH_SHORT).show(); 
      } 
     } else { 
      String textString = editText1.getText().toString(); 
      editText2.setText(String.valueOf(textString)); 
      } 
     } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) {} 

    public void clearEditText(View view) { 

     editText1.setText(""); 
     editText2.setText(""); 
    } 
} 

strings.xml

<resources> 
    <string name="app_name">PrzelicznikMocySilnika</string> 

    <string-array name="przelicznik_arraykW"> 
     <item>kW</item> 
     <item>KM</item> 
    </string-array> 

    <string-array name="przelicznik_arrayKM"> 
     <item>KM</item> 
     <item>kW</item> 
    </string-array> 



</resources> 

Layout.xmln

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.hfad.przelicznikmocysilnika.MainActivity"> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="number" 
     android:hint="Enter your value" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_toLeftOf="@+id/spinner1" 
     android:layout_toStartOf="@+id/spinner1" /> 

    <EditText 
     android:id="@+id/editText2" 
     android:hint="Enter your value" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/editText1" 
     android:ems="10" 
     android:inputType="number" 
     android:layout_toLeftOf="@+id/spinner2" 
     android:layout_toStartOf="@+id/spinner2" /> 

    <Spinner 
     android:id="@+id/spinner1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_above="@+id/editText2" /> 

    <Spinner 
     android:id="@+id/spinner2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/button" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_below="@+id/editText1" /> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/editText2" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="25dp" 
     android:text="Reset" 
     android:textAllCaps="false" 
     android:onClick="clearEditText"/> 

</RelativeLayout> 
+0

Sie können die 'EditText2' in' Runable' aktualisieren –

Antwort

0

Zwei-Wege-Konvertierung zwischen zwei EditText Ansichten, Sie haben nur zu tun, wenn Konvertierung EditText auf Fokus. Der Beispielcode ist unten.

editText1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 
       if (editText1.isFocused()) { 
        String str = editText1.getText().toString().trim(); 
        if (!str.isEmpty()) { 
         //your conversion logic here 
         editText2.setText(String.valueOf(convertedValue)); 
        }else{ 
         etTo.setText("0"); 
        } 
       } 
      } 
     }); 

Versuchen Sie auch ähnliche Vorgehensweise für die Konvertierung von editText2 zu editText1.

+0

Ihr Code funktioniert! Das ist, was ich gesucht habe. Danke :) – newActivity21

+0

Gut zu wissen @ newActivity21 –

1

Führen Sie Ihre Operationen in der onTextChanged Methode

Um ge t den aktuellen Wert verwenden editText1.getText().toString()

+0

Sie haben Recht. Ich habe jedoch immer noch Probleme, die onItemSelected-Methode zum onTextChanged hinzuzufügen, um das Ergebnis sofort in EditText2 anzuzeigen. Weil es jetzt nur den in EditText1 eingegebenen Wert anzeigt, aber das Ergebnis nicht sofort anzeigt. – newActivity21

+0

Führen Sie die Konvertierung nach dem jetzt geänderten Text durch. Der gleiche Code in der onItemSelected für die Konvertierung sollte der 'onTextChanged' Methode hinzugefügt werden –

+0

Danke Mann, alles funktioniert wie es soll :) – newActivity21

-1

Verwenden Sie einen Listener für Textänderungen.

your_edittext.addTextChangedListener(new InputValidator()); 

private class InputValidator implements 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) { 

    }  
}  

}

+0

Dies ist, was der Benutzer versucht zu tun, die nicht funktioniert. – codeMagic

0

Ihre Logik in OnTextChanged hinzufügen statt afterTextChanged

editText1.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after){ 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      String c = editText1.getText().toString(); 
      editText2.setText(c); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    } 
Verwandte Themen