Android 使用两个Textwatcher在文本更改时添加值并显示在文本框中,但它';它不工作了
我想在文本更改上添加两个Edittext值的总和,并在第三个Edittext上显示它,如果我更改这两个Edittext中任何一个的文本,那么它必须在第三个Edittext中反映为总和,但它给我垃圾值对任何人都有帮助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
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。