Calculations using Textchangedlistener

Asked

Viewed 94 times

2

I’m developing an app to multiply two EditText (quantity X value) and show the result in another EditText. The problem is that there are several EditText how the following code shows:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Custos de Implantação"
            android:id="@+id/textView110"
            android:layout_margin="10dp"
            android:textStyle="bold"
            android:layout_gravity="center_horizontal" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" >

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editQuantidade1"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/Quantidade"
                        android:layout_margin="@dimen/Quantidade"
                        android:digits="@string/digitosqtde" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="x"
                        android:id="@+id/textView93"
                        android:textSize="10dp" />

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editValor1"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/ValorUnitario"
                        android:layout_margin="@dimen/ValorUnit" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="="
                        android:id="@+id/textView94"
                        android:textSize="10dp" />

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editTotal1"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/ValoresTotais"
                        android:layout_margin="@dimen/ValorTotal"
                        android:editable="false"
                        android:focusable="false" />
                </LinearLayout>

            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" >

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/background" >

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editQuantidade2"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/Quantidade"
                        android:layout_margin="@dimen/Quantidade"
                        android:digits="@string/digitosqtde" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="x"
                        android:id="@+id/textView99"
                        android:textSize="10dp" />

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editValor2"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/ValorUnitario"
                        android:layout_margin="@dimen/ValorUnit" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="="
                        android:id="@+id/textView100"
                        android:textSize="10dp" />

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editTotal2"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/ValoresTotais"
                        android:layout_margin="@dimen/ValorTotal"
                        android:editable="false"
                        android:focusable="false" />
                </LinearLayout>

            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" >

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editQuantidade3"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/Quantidade"
                        android:layout_margin="@dimen/Quantidade"
                        android:digits="@string/digitosqtde" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="x"
                        android:id="@+id/textView105"
                        android:textSize="10dp" />

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editValor3"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/ValorUnitario"
                        android:layout_margin="@dimen/ValorUnit" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="="
                        android:id="@+id/textView106"
                        android:textSize="10dp" />

                    <EditText
                        android:layout_width="@dimen/TamanhoQTDE"
                        android:layout_height="40dp"
                        android:inputType="number"
                        android:ems="10"
                        android:id="@+id/editTotal2"
                        android:layout_marginTop="@dimen/Formularios"
                        android:textSize="10dp"
                        android:textAlignment="center"
                        android:hint="@string/ValoresTotais"
                        android:layout_margin="@dimen/ValorTotal"
                        android:editable="false"
                        android:focusable="false" />
                </LinearLayout>

            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" >

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceSmall"
                        android:text="TOTAL:"
                        android:id="@+id/textView95"
                        android:textSize="10dp" />

                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

And below follows the code of Activity:

package com.seapis.luanrabelo.seapis;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;

public class ViveirosBarragem extends Activity   {

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

        final EditText quantidade1=(EditText)findViewById(R.id.editQuantidade1);
        final EditText quantidade2=(EditText)findViewById(R.id.editQuantidade2);
        final EditText quantidade3=(EditText)findViewById(R.id.editQuantidade3);
        final EditText valor1=(EditText)findViewById(R.id.editValor1);
        final EditText valor2=(EditText)findViewById(R.id.editValor2);
        final EditText valor3=(EditText)findViewById(R.id.editValor3);
        final EditText total1=(EditText)findViewById(R.id.editTotal1);
        final EditText total2=(EditText)findViewById(R.id.editTotal2);
        final EditText total3=(EditText)findViewById(R.id.editTotal3);




        /*Script para esconder o teclado */
        getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
         /*Script para Calculos  */
        quantidade1.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                int quantidade_1 = Integer.parseInt(quantidade1.getText().toString());
                int valor_1 = Integer.parseInt(valor1.getText().toString());
                int total_1 = (quantidade_1 * valor_1);
                total1.setText("R$ " + total_1);

                int quantidade_2 = Integer.parseInt(quantidade2.getText().toString());
                int valor_2 = Integer.parseInt(valor2.getText().toString());
                int total_2 = (quantidade_2 * valor_2);
                total2.setText("R$ " + total_2);

                int quantidade_3 = Integer.parseInt(quantidade3.getText().toString());
                int valor_3 = Integer.parseInt(valor3.getText().toString());
                int total_3 = (quantidade_3 * valor_3);
                total3.setText("R$ " + total_3);

            }

        });

    }

}

Where the values only calculate when I modify the value of EditText quantity1

Can someone help me make it better?

2 answers

3

Hello,

First of all implement Textwatcher and Onclicklistener:

 public class ViveirosBarragem extends Activity implements TextWatcher, View.OnClickListener  {

After that:

quantidade1.addTextChangedListener(this);
quantidade2.addTextChangedListener(this);
quantidade3.addTextChangedListener(this);

quantidade1.setOnClickListener(this);
quantidade2.addOnClickListener(this);
quantidade3.addOnClickListener(this);

Create a global variable within the class and take the editText view inside the Onclicklistener method.

Thus:

View editTextView;
 @Override
    public void onClick(View v) {
editTextView = v;
}

Knowing which edittext is currently being edited, you can handle it by switch, leaving it much more organized and simple to make future changes

Thus:

@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
switch(editTextView.getId())
case R.id.editQuantidade1:
//coloque as intruções aqui
break;    
case R.id.editQuantidade2:
//coloque as intruções aqui
break;
case R.id.editQuantidade3:
//coloque as intruções aqui
break;
}
}
  • So the code goes like this

0

package com.seapis.luanrabelo.seapis;


import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;

public class ViveirosBarragem extends Activity implements TextWatcher, View.OnClickListener {

    quantidade1.addTextChangedListener(this);
    quantidade2.addTextChangedListener(this);
    quantidade3.addTextChangedListener(this);

    quantidade1.setOnClickListener(this);
    quantidade2.addOnClickListener(this);
    quantidade3.addOnClickListener(this);

    View editTextView;

    @Override
    public void onClick(View v) {
        editTextView = v;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        switch(editTextView.getId())
        case R.id.editQuantidade1:
        //coloque as intruções aqui
        break;
        case R.id.editQuantidade2:
        //coloque as intruções aqui
        break;
        case R.id.editQuantidade3:
        //coloque as intruções aqui
        break;

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
}
  • yes but do not forget to put the "quantity1.setOnClickListener(this);" inside onCreate

  • If successful, mark as answered to close the topic. :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.