2016-01-19 1 views
0

Je semble avoir quelques problèmes avec le textwatcher, étant nouveau au développement de java/android j'ai quelques questions. En un mot, j'ai 3 champs, 2 modifiables et 1 vue capable. L'idée est de changer deux champs et de les soustraire au troisième.Questions TextWatcher

  1. Le code ci-dessous semble fonctionner très bien, mais le champ ne change semble pas toujours, même si l'édition textwatcher du champ regarde.

  2. Existe-t-il un moyen de regarder plusieurs champs? Idéalement, j'aimerais que les deux champs soient surveillés et que le troisième champ soit modifié lorsque l'un ou l'autre est modifié.

  3. Existe-t-il une meilleure façon d'avoir les deux premiers champs d'édition non null sans utiliser try/catch? Si je n'utilise pas le try/catch, l'application tombe en panne.

Merci pour toute aide.

package com.autotools.autotools; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.EditText; 
import android.widget.TextView; 

public class autoLoan extends AppCompatActivity { 


double TotalAfterTrade, FinalAutoPrice, TradeInPrice; 

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

    final TextView PriceAfterTradeText = (TextView) findViewById(R.id.textViewSubTotal); 
    EditText FinalAutoPriceText = (EditText) findViewById(R.id.editTextPrice); 

    try { 
     EditText TradeInPriceText = (EditText) findViewById(R.id.editTextTrade); 
     FinalAutoPrice = Double.parseDouble(FinalAutoPriceText.getText().toString()); 
     TradeInPrice = Double.parseDouble(TradeInPriceText.getText().toString()); 
     TotalAfterTrade = FinalAutoPrice - TradeInPrice; 


    } catch (NumberFormatException e) { 
    } 


     FinalAutoPriceText.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) { 
       PriceAfterTradeText.setText(String.valueOf(TotalAfterTrade)); 
      } 
     }); 

} 
} 

XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.autotools.autotools.autoLoan"> 

<EditText 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" 
    android:ems="10" 
    android:id="@+id/editTextPrice" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="80dp" 
    android:text="" 
    android:textSize="25dp" /> 

<TextView 
    android:layout_width="175dp" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="Price of Vehicle" 
    android:id="@+id/textViewPrice" 
    android:layout_alignBottom="@+id/editTextPrice" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:textSize="25dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Auto Loan Calculator" 
    android:id="@+id/textView3" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignRight="@+id/textView2" 
    android:layout_alignEnd="@+id/textView2" 
    android:layout_above="@+id/textView2" 
    android:textSize="35dp" 
    android:layout_marginTop="20dp" 
    android:textAlignment="center" /> 

<EditText 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" 
    android:ems="10" 
    android:id="@+id/editTextTrade" 
    android:layout_marginTop="40dp" 
    android:text="" 
    android:textSize="25dp" 
    android:layout_below="@+id/textViewPrice" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="175dp" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="Trade-in Value" 
    android:id="@+id/textViewTrade" 
    android:textSize="25dp" 
    android:layout_alignBottom="@+id/editTextTrade" 
    android:layout_alignLeft="@+id/textViewPrice" 
    android:layout_alignStart="@+id/textViewPrice" /> 

<TextView 
    android:layout_width="175dp" 
    android:textSize="25dp" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="0" 
    android:id="@+id/textViewSubTotal" 
    android:layout_below="@+id/editTextTrade" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="60dp" 
    android:textAlignment="center" 
    android:layout_alignRight="@+id/editTextTrade" 
    android:layout_alignEnd="@+id/editTextTrade" /> 

<TextView 
    android:layout_width="175dp" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="Price after Trade" 
    android:id="@+id/textViewPriceAfterTrade" 
    android:textSize="23dp" 
    android:layout_alignTop="@+id/textViewSubTotal" 
    android:layout_alignLeft="@+id/textViewTrade" 
    android:layout_alignStart="@+id/textViewTrade" /> 


</RelativeLayout> 

Répondre

1

Il ne change pas toujours vous mettez cela parce que l'intérieur de la même valeur que vous ware lui passez en onCreate ici

TotalAfterTrade = FinalAutoPrice - TradeInPrice; 

Cette valeur ne change jamais.

Pour modifier la valeur en textField sur le changement utiliser le code comme:

 public void onTextChanged(CharSequence s, int start, 
            int before, int count) { 
     FinalAutoPrice = Double.parseDouble(FinalAutoPriceText.getText().toString()); 
     TradeInPrice = Double.parseDouble(TradeInPriceText.getText().toString()); 
     TotalAfterTrade = FinalAutoPrice - TradeInPrice; 
     PriceAfterTradeText.setText(String.valueOf(TotalAfterTrade)); 
     } 
+0

Merci qui a aidé, des idées sur les TextWatches multiples? – Riva

+0

écrit TextWatcher sur le champ. et en utiliser un sur plusieurs EditText –