Android 在多个编辑文本框上更改焦点

Android 在多个编辑文本框上更改焦点,android,Android,我编写了一些代码来测试用户是否更改了6个edittext框中的任何一个框中的值,但代码看起来庞大且冗余。我想知道是否有更优雅的方式来做这件事 用户将数字输入到所有6个文本框中,每次输入后,计算例行程序都会在进行计算之前检查所有框中的数字是否有效。kistener必须向丢失的foucus开火,以便在计算完成之前将数字放入框中。并输出结果。如果用户希望返回并更改6个编辑文本框中任意一个框中的值,则计算例程将再次运行 我在onCreate部分为每个edittext框设置了6个侦听器。 然后我有6个单独

我编写了一些代码来测试用户是否更改了6个edittext框中的任何一个框中的值,但代码看起来庞大且冗余。我想知道是否有更优雅的方式来做这件事

用户将数字输入到所有6个文本框中,每次输入后,计算例行程序都会在进行计算之前检查所有框中的数字是否有效。kistener必须向丢失的foucus开火,以便在计算完成之前将数字放入框中。并输出结果。如果用户希望返回并更改6个编辑文本框中任意一个框中的值,则计算例程将再次运行 我在onCreate部分为每个edittext框设置了6个侦听器。 然后我有6个单独的例程来测试每个hasFocus==false

在onCreate部分中,我为6个用户输入edottext框中的每个框设置了一个侦听器:

et1.setOnFocusChangeListener(this);
.   
.
  .
.
et6.setOnFocusChangeListener(this);
然后我有一个方法来检查是否有编辑文本框失去焦点,建议用户更改一些数据,然后重新运行计算。
我对6个用户输入编辑文本框中的每一个进行检查,如下所示:

@Override
public void onFocusChange(View v, boolean hasFocus)
{   if ((v == findViewById(R.id.et1)) && (hasFocus==false))
        {do calculations } 
    .
    .
    .
    .
    if ((v == findViewById(R.id.et6)) && (hasFocus==false))
        {do calculations } 

}

如果我在上面的代码中有任何错误,请原谅。它在我的平台上运行,但我想学习一种更好的方法来实现这一点。

我认为没有必要检查哪个视图失去了焦点,除非根据哪个框失去了焦点,计算结果有所不同。如果计算结果相同,请尝试:

public void onFocusChange(View v, boolean hasFocus) {
    if(!hasFocus) {
        //do calculations
    }
}
如果你只关心其中一个失去了焦点,那么每当焦点改变时,只要检查它是否没有聚焦,然后进行计算

另外,仅供参考,检查
if(v.getId()==R.id.et1)
比不必要地调用
findViewById()
更有效

编辑:只是想一想,我还没有测试过这个,但是类似这样的方法可能更有效,只在值实际更改时才进行计算:

private String last;

public void onFocusChange(View v, boolean hasFocus) {
    if(hasFocus) {
        last = ((EditText)v).getText().toString();      
    } else {
        if(!((EditText)v).getText().toString().equals(last)) {
            //do calculations
        }
    }
}

我认为检查哪个视图失去了焦点是不必要的,除非根据哪个框失去了焦点,计算是不同的。如果计算结果相同,请尝试:

public void onFocusChange(View v, boolean hasFocus) {
    if(!hasFocus) {
        //do calculations
    }
}
如果你只关心其中一个失去了焦点,那么每当焦点改变时,只要检查它是否没有聚焦,然后进行计算

另外,仅供参考,检查
if(v.getId()==R.id.et1)
比不必要地调用
findViewById()
更有效

编辑:只是想一想,我还没有测试过这个,但是类似这样的方法可能更有效,只在值实际更改时才进行计算:

private String last;

public void onFocusChange(View v, boolean hasFocus) {
    if(hasFocus) {
        last = ((EditText)v).getText().toString();      
    } else {
        if(!((EditText)v).getText().toString().equals(last)) {
            //do calculations
        }
    }
}

您可能只希望在文本实际更改时进行更改。因此,您应该为EditText添加TextChangedListener。因此,对于每个编辑文本:

et1.addTextChangedListener(this);
...
et6.addTextChangedListener(this);
然后,让您的类实现


您可能只希望在文本实际更改时进行更改。因此,您应该为EditText添加TextChangedListener。因此,对于每个编辑文本:

et1.addTextChangedListener(this);
...
et6.addTextChangedListener(this);
然后,让您的类实现