Android 使用两个Textwatcher在文本更改时添加值并显示在文本框中,但它';它不工作了

Android 使用两个Textwatcher在文本更改时添加值并显示在文本框中,但它';它不工作了,android,Android,我想在文本更改上添加两个Edittext值的总和,并在第三个Edittext上显示它,如果我更改这两个Edittext中任何一个的文本,那么它必须在第三个Edittext中反映为总和,但它给我垃圾值对任何人都有帮助 package com.example.bipinp.mithun; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.suppor

我想在文本更改上添加两个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);
}
}

您从
amount
中获得两次文本。我想你可能想把它改成你的两个
EditText
s

 @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 = amountp.getText().toString();


    //...

您将从
amount
获取两次文本。我想你可能想把它改成你的两个
EditText
s

 @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 = amountp.getText().toString();


    //...

我从两个不同的文本框中获取文本,它们不相同。你的代码中有它们。您可以从
TextView amount
中获取
sAmnt
sAmntp
的文本。sAmnt表示实际金额,sAmntp表示支付金额。不,您可以调用
amount
两次,而不是第二次调用amountp。我从两个不同的文本框中获取文本,它们不相同。您的代码中有它。您可以从
text查看
sAmnt
sAmntp
的金额中获取文本。sAmnt表示实际金额,sAmntp表示支付金额。不,您可以调用
amount
两次,而不是第二次调用amountp。