我编写了一个程序来计算第一个和第二个文本框的值,并在点击“添加”按钮后在第三个文本框中显示结果。但是,一旦我开始在第一个或第二个文本框中自动输入,我想将结果显示在第三个文本框中,而不使用任何按钮。我知道这是可能的,因为有许多计算器应用程序可以完成预期的工作。我的代码如下。只想删除“添加”按钮并自动进行计算。请帮帮我......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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.saptarshi.test.MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:ems="10"
android:id="@+id/t1"
android:layout_weight="1"
android:hint="1st number" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:ems="10"
android:id="@+id/t2"
android:layout_weight="1"
android:hint="2nd number" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:ems="10"
android:id="@+id/t3"
android:layout_weight="1"
android:hint="Total" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add"
android:id="@+id/button"
android:layout_weight="1"
android:onClick="add" />
</LinearLayout>
</LinearLayout>
public void add(View view){
EditText a = (EditText) findViewById(R.id.t1);
EditText b = (EditText) findViewById(R.id.t2);
EditText c = (EditText) findViewById(R.id.t3);
int x = Integer.parseInt(a.getText().toString());
int y = Integer.parseInt(b.getText().toString());
int z = x+y;
c.setText(Integer.toString(z));
}
答案 0 :(得分:1)
您可以将TextWatcher用于EditText,请参阅下面的示例
TextWatcher autoAddTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int value1 = Integer.parseInt(editText1.getText().toString());
int value2 = Integer.parseInt(editText2.getText().toString());
editText3.setText(value1 + value2);
}
@Override
public void afterTextChanged(Editable s) {
}
};
editText1.addTextChangedListener(autoAddTextWatcher);
editText2.addTextChangedListener(autoAddTextWatcher);
如果检查EditText是否为空,可能会更好,因此您的应用程序不会强制关闭。例如:
int value1 = TextUtils.isEmpty(editText1.getText().toString()) ? 0 : Integer.parseInt(editText1.getText().toString());
不要忘记添加
android:inputType="number"
到EditText的XML,将用户输入限制为数字,因此不存在NumberFormatException。
答案 1 :(得分:0)
您可以对EditText的两个代码使用以下代码
edittext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(!s.equals("") )
{ //do your work here }
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
答案 2 :(得分:0)
做这样的事情:
a.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!b.getText().toString().equals("") && !a.getText().toString().equals("")) {
c.setText(String.valueOf(Integer.valueOf(a.getText().toString()) + Integer.valueOf(b.getText().toString())));
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
答案 3 :(得分:0)
您可以使用 TextWatcher 。它允许我们在运行时监视任何EditText中对文本所做的更改。 TextWatcher作为一个监听器,附加到EditText,并使您能够监视对相应EditText所做的更改。
它包含3个方法,如下:
<强> 1。 afterTextChanged():在更改文本后调用此方法。
<强> 2。 beforeTextChanged():当文本即将由某些新文本更新时,将调用此方法。
<强> 2。 onTextChanged():刚刚更新文本时调用此方法。
示例:强>
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
使用onTextChanged()方法执行所需的计算。