0

我在多个表行中有多个编辑文本。我知道我可以通过 findViewById 访问它们。有没有办法在 onFocusChange 中找出哪个 edittext 具有焦点,而不是使用 findViewById?

public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
int edit1 = 0, edit2 = 0, result = 0;
if(hasFocus == true) 
{
        
}   
else {
edit1 = Integer.parseInt(et1.getText().toString());
result = Integer.parseInt(et3.getText().toString());
edit2 = result - edit1;
et2.setText(Integer.toString(edit2));
et3.setText(Integer.toString(edit2));
  }
}
4

4 回答 4

1
getWindow().getCurrentFocus();

当然,在此之后您将需要做一些聪明的事情 - 即使只是假设焦点是 EditText 的尝试/捕获可能就足够了。

于 2013-04-12T11:51:05.440 回答
1

当用户从一个EditText切换到另一个时,onFocusChange()会被调用两次;一次用于失去焦点的视图,第二次用于现在拥有它的视图。(编辑:这听起来像是这些事件到达的顺序,但即使是这样,也不能保证,你不能依赖它。)

因此,在您的hasFocus == true分支中,您只需检查View v,看看它是否是一个instanceof EditText,并且您有您的 View 对象。

于 2013-04-12T12:01:30.557 回答
0

检查 View v 参数是否等于 EditText 的实例。

if(hasFocus && v == et1) {
   ...
}
于 2013-04-12T12:08:40.193 回答
0

您可以在每个 edittext 视图中 setTag() 并在每个视图中设置焦点侦听器。如果您不想使用 findViewById() 找到它,则可以以编程方式从父视图中检索视图并为其分配标签并设置单击侦听器。

于 2013-04-12T12:49:08.010 回答