2017-07-10 17 views
-1

値をkWからkmに変換するアプリケーションを開発していますが、EditText1でこの値を入力したときにEditText1の値を表示したいと思っています。これを行う方法。今は、EditText2で結果を得るためにSpinnerから正しい値を選択する必要があります。これはどうやって変わるのですか?たぶん間違った方法で私はスピナーからの検索価値を探していますか?また、アプリケーションの改善方法についてもお聞きします。ありがとうございました。結果をEditTextに自動的に表示する方法は?

私はTextWeatcherを試してみましたが、まだ動作していません。

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

「実行可能」の 'EditText2'を更新できます。 –

答えて

0

であなたのロジックを追加し、あなたが変換を行う必要があります。サンプルコードは以下のとおりです。

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

editText2からeditText1への変換も同様の方法で試してください。

+0

コードは機能します! これは私が探していたものです。ありがとうございました:) – newActivity21

+0

@ newActivity21を知ってうれしい –

1

GEへonTextChanged方法

であなたの操作を実行現在の値の使用editText1.getText().toString()

+0

あなたは正しいです。しかし、私はまだOnTextChangedにonItemSelectedメソッドを追加して、EditText2の結果をすぐに表示することができません。 EditText1に入力された値のみが表示されるようになったため、すぐに結果が と表示されないためです。 – newActivity21

+0

テキストを変更した後に変換を実行します。 onItemSelectedの変換用の同じコードを 'onTextChanged'メソッドに追加する –

+0

ありがとうございます。すべてが正常に動作します:) – newActivity21

-1

リスナーを使用してテキストを変更します。 EditTextが焦点である場合にのみ

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

これはユーザーが実行しようとしている動作ではありません。 – codeMagic

0

が2つのEditTextビュー間の双方向の変換についてonTextChanged代わりの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) { 
     } 
    } 
関連する問題