2016-01-19 37 views
0

我似乎遇到了一些與textwatcher有關的問題,剛接觸java/android開發我有幾個問題。簡而言之,我有3個字段,2個可編輯和1個可見。這個想法是改變兩個領域,並有第三個減去他們。TextWatcher問題

  1. 下面的代碼似乎運行良好,但該字段似乎永遠不會改變,即使編輯字段textwatcher正在觀看。

  2. 有沒有辦法看多個領域?理想情況下,我希望能夠監視這兩個字段,並在編輯時更改第三個字段。

  3. 有沒有更好的方式讓前兩個編輯字段不爲null而不使用try/catch?如果我不使用try/catch,應用程序就會崩潰。

感謝您的任何幫助。

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> 

回答

1

它不會改變你監守總是把你何干傳遞給它的onCreate這裏

TotalAfterTrade = FinalAutoPrice - TradeInPrice; 

該值永遠不會改變的相同值內。

 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

感謝那些幫助,在多TextWatches任何想法:

要在文本框上的變化使用如下代碼更改值? – Riva

+0

將TextWatcher寫入字段。並在多個EditText上使用一個 –