如果在多个 EditText 中有输入,如何更改 TextView?
How to change TextView if there's input in multiple EditTexts?
我正在尝试编写 android 程序,该程序显示在两个不同的 EditText 字段中指定的两个整数的最大公约数。首先,我用按钮完成了它,一切正常(你可以看到 onclick 侦听器在下面的代码中被注释掉了)。现在我想这样做:当两个 EditText 都不为空时,应用程序会进行检查,然后自动开始计算并显示 gcd。当我开始在任何 EditText 字段中输入内容时,Buty 应用程序崩溃了。我还尝试仅在其中一个 EditText 上添加 TextChangeListener。一切都很好,直到我从其中一个字段中删除所有输入,然后应用程序再次崩溃。我才刚刚开始了解 android 开发并主要通过修改互联网上找到的示例来制作这个应用程序,所以也许我做错了什么......有人可以帮助我吗?谢谢
MainActivity.java
public class MainActivity extends Activity
{
EditText a;
EditText b;
TextView gcdResult;
Button calculateGcd;
int a, b, gcdValue
TextWatcher textWatcher = new TextWatcher(){
@Override
public void afterTextChanged(Editable s){}
@Override
public void beforeTextChanged(CharSequence s,int start, int count, int after){}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){
AutoCalculateGcd();
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
a = (EditText)findViewById(R.id.aText1);
b = (EditText)findViewById(R.id.bText1);
gcdResult = (TextView)findViewById(R.id.resultTextView1);
calculateGcd = (Button)findViewById(R.id.calcButton1);
/* calculateGcd.setOnClickListener(new OnClickListener(){
public void onClick(View v){
AutoCalculateRatio();
}
});*/
a.addTextChangedListener(textWatcher);
b.addTextChangedListener(textWatcher);
}
//Euclidean alghorithm to find gcd
public static int gcd(int a, int b) {
if (b == 0) return w;
else return gcd(b a % b);
}
public static boolean isInputNotEmpty(EditText a, EditText b){
String a = a.getText().toString();
String b = b.getText().toString();
if(a.equals("") && b.equals("") ){
return false;
}
else{
return true;
}
}
public void AutoCalculateGcd(){
if(isInputNotEmpty(a, b)){
a = Integer.parseInt(width.getText().toString());
b = Integer.parseInt(height.getText().toString());
gcdValue = gcd(a, b);
ratioResult.setText(Integer.toString(gcdValue));
}
else{
//Toast.makeText(this, "No input", Toast.LENGTH_SHORT).show();
}
}
}
如果您 post 堆栈跟踪可能会有所帮助,但我的猜测是您从 Integer.parseInt()
调用中获得了 NumberFormatException。一种方法是做类似的事情:
try {
a = Integer.parseInt(width.getText().toString());
b = Integer.parseInt(height.getText().toString());
gcdValue = gcd(a, b);
ratioResult.setText(Integer.toString(gcdValue));
} catch ( NumberFormatException e) {
ratioResult.setText("N/A")
}
实际上,您应该替换
public static boolean isInputNotEmpty(EditText a, EditText b) {
String a = a.getText().toString();
String b = b.getText().toString();
if (a.equals("") && b.equals("")) {
return false;
}
else {
return true;
}
}
和
public static boolean isInputNotEmpty(EditText a, EditText b) {
String a = a.getText().toString();
String b = b.getText().toString();
if (a.equals("") || b.equals("")) {
return false;
}
else {
return true;
}
}
甚至
public static boolean isInputNotEmpty(EditText a, EditText b) {
return !(a.getText().toString().isEmpty() || b.getText().toString().isEmpty());
}
因为您想知道其中是否有 (||) 为空,而不是 (&&) 是否为空。
我正在尝试编写 android 程序,该程序显示在两个不同的 EditText 字段中指定的两个整数的最大公约数。首先,我用按钮完成了它,一切正常(你可以看到 onclick 侦听器在下面的代码中被注释掉了)。现在我想这样做:当两个 EditText 都不为空时,应用程序会进行检查,然后自动开始计算并显示 gcd。当我开始在任何 EditText 字段中输入内容时,Buty 应用程序崩溃了。我还尝试仅在其中一个 EditText 上添加 TextChangeListener。一切都很好,直到我从其中一个字段中删除所有输入,然后应用程序再次崩溃。我才刚刚开始了解 android 开发并主要通过修改互联网上找到的示例来制作这个应用程序,所以也许我做错了什么......有人可以帮助我吗?谢谢
MainActivity.java
public class MainActivity extends Activity
{
EditText a;
EditText b;
TextView gcdResult;
Button calculateGcd;
int a, b, gcdValue
TextWatcher textWatcher = new TextWatcher(){
@Override
public void afterTextChanged(Editable s){}
@Override
public void beforeTextChanged(CharSequence s,int start, int count, int after){}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){
AutoCalculateGcd();
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
a = (EditText)findViewById(R.id.aText1);
b = (EditText)findViewById(R.id.bText1);
gcdResult = (TextView)findViewById(R.id.resultTextView1);
calculateGcd = (Button)findViewById(R.id.calcButton1);
/* calculateGcd.setOnClickListener(new OnClickListener(){
public void onClick(View v){
AutoCalculateRatio();
}
});*/
a.addTextChangedListener(textWatcher);
b.addTextChangedListener(textWatcher);
}
//Euclidean alghorithm to find gcd
public static int gcd(int a, int b) {
if (b == 0) return w;
else return gcd(b a % b);
}
public static boolean isInputNotEmpty(EditText a, EditText b){
String a = a.getText().toString();
String b = b.getText().toString();
if(a.equals("") && b.equals("") ){
return false;
}
else{
return true;
}
}
public void AutoCalculateGcd(){
if(isInputNotEmpty(a, b)){
a = Integer.parseInt(width.getText().toString());
b = Integer.parseInt(height.getText().toString());
gcdValue = gcd(a, b);
ratioResult.setText(Integer.toString(gcdValue));
}
else{
//Toast.makeText(this, "No input", Toast.LENGTH_SHORT).show();
}
}
}
如果您 post 堆栈跟踪可能会有所帮助,但我的猜测是您从 Integer.parseInt()
调用中获得了 NumberFormatException。一种方法是做类似的事情:
try {
a = Integer.parseInt(width.getText().toString());
b = Integer.parseInt(height.getText().toString());
gcdValue = gcd(a, b);
ratioResult.setText(Integer.toString(gcdValue));
} catch ( NumberFormatException e) {
ratioResult.setText("N/A")
}
实际上,您应该替换
public static boolean isInputNotEmpty(EditText a, EditText b) {
String a = a.getText().toString();
String b = b.getText().toString();
if (a.equals("") && b.equals("")) {
return false;
}
else {
return true;
}
}
和
public static boolean isInputNotEmpty(EditText a, EditText b) {
String a = a.getText().toString();
String b = b.getText().toString();
if (a.equals("") || b.equals("")) {
return false;
}
else {
return true;
}
}
甚至
public static boolean isInputNotEmpty(EditText a, EditText b) {
return !(a.getText().toString().isEmpty() || b.getText().toString().isEmpty());
}
因为您想知道其中是否有 (||) 为空,而不是 (&&) 是否为空。