Android 如何使用textchangedlistener在运行时从edittext中减去两个值

Android 如何使用textchangedlistener在运行时从edittext中减去两个值,android,android-edittext,Android,Android Edittext,我想从EditText中减去两个值,并显示在第三个EditText上,如果我对两个EditText中的任何一个进行更改,则它必须反映在第三个EditText上 我已经实现了一个代码,但它不起作用 package com.example.bipinp.mithun; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.w

我想从EditText中减去两个值,并显示在第三个EditText上,如果我对两个EditText中的任何一个进行更改,则它必须反映在第三个EditText上

我已经实现了一个代码,但它不起作用

package com.example.bipinp.mithun;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public  class DailyEntry extends AbstractActivity implements TextWatcher {
    private Button btnsbmtentry;
    private Spinner spiner2;
    private EditText milkcaret,amount,amountp,prevbal,currentBal,totalBal;
    DatabaseHelper mydb;
    int amnt,amntp,sub;
    String sAmnt,sAmntp,sumvalue;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_daily_entry);
        mydb = new DatabaseHelper(this);


        btnsbmtentry=(Button)findViewById(R.id.btnsubmitentry);
        spiner2=(Spinner)findViewById(R.id.spinner2);
        milkcaret=(EditText)findViewById(R.id.txt1_de);
        amount=(EditText)findViewById(R.id.txt2_de);
        amountp=(EditText)findViewById(R.id.txt3_de);
        prevbal = (EditText)findViewById(R.id.txt4_de);

        totalBal = (EditText)findViewById(R.id.txt4_deTotBal);
        amount.addTextChangedListener(this);
        amountp.addTextChangedListener(this);

        adddata2();
        loadspinner();
        spiner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String pos = parent.getItemAtPosition(position).toString();
                String bale = mydb.balance(pos);
                prevbal.setText(bale);

            }

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

            }
        });

    }

    private void loadspinner() {
        DatabaseHelper db = new DatabaseHelper(this);
        List<String> labels = db.getAllLabels();
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,labels);
        dataAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        spiner2.setAdapter(dataAdapter);
    }

    private void adddata2() {
        btnsbmtentry.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean insertdata2 = mydb.insertdata2(spiner2.getSelectedItem().toString(),milkcaret.getText().toString(),amount.getText().toString(),amountp.getText().toString(),totalBal.getText().toString());
                if (insertdata2)
                    Toast.makeText(DailyEntry.this, "Record Inserted", Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(DailyEntry.this, "Databse Error", Toast.LENGTH_SHORT).show();
            }
        });
    }


    @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) {
        prevbal=(EditText)findViewById(R.id.txt4_de);
        currentBal = (EditText)findViewById(R.id.txt4_deCurrB);

        sAmnt = amount.getText().toString();
        sAmntp = amount.getText().toString();
        try {
            amnt = Integer.parseInt(sAmnt);
            amntp = Integer.parseInt(sAmntp);
            sub = amnt-amntp;
        }catch (NumberFormatException e){

        }
        sumvalue = String.valueOf(sub);
        currentBal.setText(sumvalue);

    }
}
package com.example.bipinp.mithun;
导入android.os.Bundle;
导入android.support.design.widget.FloatingActionButton;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Spinner;
导入android.widget.Toast;
导入java.util.ArrayList;
导入java.util.List;
公共类DailyEntry扩展AbstractActivity实现TextWatcher{
私人按钮BTNSB记忆;
私人纺纱机2;
private EditText milkcaret、amount、amountp、prevbal、currentBal、totalBal;
数据库助手mydb;
int amnt、amntp、sub;
字符串sAmnt、sAmntp、sumvalue;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u daily\u条目);
mydb=新数据库助手(此);
btnsbmtentry=(按钮)findViewById(R.id.btnsubmitery);
spiner2=(微调器)findViewById(R.id.spiner2);
milkcaret=(EditText)findViewById(R.id.txt1_de);
金额=(EditText)findViewById(R.id.txt2_de);
amountp=(EditText)findViewById(R.id.txt3_de);
prevbal=(EditText)findViewById(R.id.txt4_de);
totalBal=(EditText)findViewById(R.id.txt4_deTotBal);
amount.addTextChangedListener(此);
amountp.addTextChangedListener(此);
adddata2();
loadspinner();
spiner2.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
字符串pos=parent.getItemAtPosition(position.toString();
字符串捆=mydb.余额(位置);
前捆包、后捆包(捆);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
私有void加载微调器(){
DatabaseHelper db=新的DatabaseHelper(此);
List labels=db.getAllLabels();
ArrayAdapter dataAdapter=新的ArrayAdapter(此为R.layout.support\u simple\u spinner\u dropdown\u项、标签);
dataAdapter.setDropDownViewResource(R.layout.support\u simple\u spinner\u dropdown\u项目);
spiner2.setAdapter(数据适配器);
}
私有void adddata2(){
btnsbmtentry.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
boolean insertdata2=mydb.insertdata2(spiner2.getSelectedItem().toString(),milkcaret.getText().toString(),amount.getText().toString(),amountp.getText().toString(),totalBal.getText().toString());
如果(插入数据2)
Toast.makeText(DailyEntry.this,“插入记录”,Toast.LENGTH_SHORT.show();
其他的
Toast.makeText(DailyEntry.this,“数据库错误”,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
@凌驾
公共无效后文本已更改(可编辑){
prevbal=(EditText)findViewById(R.id.txt4_de);
currentBal=(编辑文本)findViewById(R.id.txt4_deCurrB);
sAmnt=amount.getText().toString();
sAmntp=amount.getText().toString();
试一试{
amnt=Integer.parseInt(sAmnt);
amntp=Integer.parseInt(sAmntp);
sub=amnt amntp;
}捕获(数字格式){
}
sumvalue=字符串。valueOf(sub);
currentBal.setText(sumvalue);
}
}

试试这段代码。这对我很有用

public class MainActivity extends Activity implements TextWatcher {

int iEditWages;
int iEditMoneySpent;
int iSubtract;
String sEditWages;
String sEditMoneySpent;
String sTotalLeftToSpend;
EditText EditWages;
EditText EditMoneySpent;
TextView TotalLeft;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditMoneySpent = (EditText) findViewById(R.id.TotalSpentNumber);
    EditWages = (EditText) findViewById(R.id.TotalWagesNumber);
    EditMoneySpent.addTextChangedListener(this);
    EditWages.addTextChangedListener(this);
}

@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) {

    EditWages = (EditText) findViewById(R.id.TotalWagesNumber);
    EditMoneySpent = (EditText) findViewById(R.id.TotalSpentNumber);
    TotalLeft = (TextView) findViewById(R.id.TotalViewNumber);

    sEditWages = EditWages.getText().toString();
    sEditMoneySpent = EditMoneySpent.getText().toString();
    try {
        iEditWages = Integer.parseInt(sEditWages);
        iEditMoneySpent = Integer.parseInt(sEditMoneySpent);
        iSubtract = iEditWages - iEditMoneySpent;
    } catch (NumberFormatException e) {
    }

    sTotalLeftToSpend = String.valueOf(iSubtract);
    TotalLeft.setText(sTotalLeftToSpend);

}

试试这段代码。这对我很有用

public class MainActivity extends Activity implements TextWatcher {

int iEditWages;
int iEditMoneySpent;
int iSubtract;
String sEditWages;
String sEditMoneySpent;
String sTotalLeftToSpend;
EditText EditWages;
EditText EditMoneySpent;
TextView TotalLeft;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditMoneySpent = (EditText) findViewById(R.id.TotalSpentNumber);
    EditWages = (EditText) findViewById(R.id.TotalWagesNumber);
    EditMoneySpent.addTextChangedListener(this);
    EditWages.addTextChangedListener(this);
}

@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) {

    EditWages = (EditText) findViewById(R.id.TotalWagesNumber);
    EditMoneySpent = (EditText) findViewById(R.id.TotalSpentNumber);
    TotalLeft = (TextView) findViewById(R.id.TotalViewNumber);

    sEditWages = EditWages.getText().toString();
    sEditMoneySpent = EditMoneySpent.getText().toString();
    try {
        iEditWages = Integer.parseInt(sEditWages);
        iEditMoneySpent = Integer.parseInt(sEditMoneySpent);
        iSubtract = iEditWages - iEditMoneySpent;
    } catch (NumberFormatException e) {
    }

    sTotalLeftToSpend = String.valueOf(iSubtract);
    TotalLeft.setText(sTotalLeftToSpend);

}

在后文本更改中更新此行:

sAmnt = amount.getText().toString();
sAmntp = amount.getText().toString();
致:


在后文本更改中更新此行:

sAmnt = amount.getText().toString();
sAmntp = amount.getText().toString();
致:


也许你在那里遇到了例外。选中exception(异常)。不要在PostTextChanged(后文本更改)中尝试,而要尝试onTextChanged以实现所需功能。它不起作用的是什么?您是否在结果editText中写入了一些内容?首先,在设置值sAmntp时,您正在使用amount.getText()而不是amountp设置与sAmnt相同的值。getText()可能是您遇到了异常。选中exception(异常)。不要在PostTextChanged(后文本更改)中尝试,而要尝试onTextChanged以实现所需功能。它不起作用的是什么?您是否在结果编辑文本中写入了一些内容?首先,在设置值sAmntp时,您正在使用amount.getText()而不是amountp.getText()设置与sAmnt相同的值