2012-02-24 65 views
5

在我的一个活动中,我有三个EditText s和一个OK按钮。 OnFocusChangeListener设置为全部三个EditText s。聆听者应该在每次焦点丢失时触发。OnFocusChange不总是工作

EditText之间切换完美。但是,如果用户按下确定按钮,则在按下按钮之前,用户关注的EditText没有焦点改变(失去焦点)。

我的代码有什么问题?

private class MyOnFocusChangeListener implements OnFocusChangeListener { 
    private EditText editText; 

    public MyOnFocusChangeListener(final EditText editText) { 
     super(); 

     this.editText = editText; 
    } 

    @Override 
    public void onFocusChange(final View view, final boolean isFocused) { 
     if (!isFocused) { 
      if (editText == editText1) { 
       // Do a calculation 
      } else if (editText == editText2) { 
       // Do another calculation 
      } else if (editText == editText3) { 
       // Do a different calculation 
      } 
     } 
    } 
} 

@Override 
public void onCreate(final Bundle bundle) { 
    // ... 
    editText1.setOnFocusChangeListener(new MyOnFocusChangeListener(editText1)); 
    editText2.setOnFocusChangeListener(new MyOnFocusChangeListener(editText2)); 
    editText3.setOnFocusChangeListener(new MyOnFocusChangeListener(editText3)); 
    // ... 
} 

回答

7

你可以尝试清除焦点,当上确定或其他按钮....

例如,用户点击

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
{ 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      editText1.clearfocus(); 
      editText2.clearfocus(); 
      editText3.clearfocus(); 
      .... 
    } 
} 
+0

这可能会触发所有三个EditText上的OnFocusChange,因此我无法使用它。但是这帮助我找到了一个更好的方法。我现在将EditText存储在类成员和OnClick按钮中,我清除该特定EditText的焦点。这就像一个魅力。非常感谢。 – 2012-02-24 18:44:54

1

听起来像是你可有带触摸模式的问题,从android docs

“触控模式,选择和聚焦点之间的关系,意味着你必须不依赖于选择和/或集中存在在你的应用程序中。“

+0

感谢您的回答。这非常糟糕,因为我必须在两个不好的情况之间进行选择。 1.)只有当用户在点击OK按钮之前输入不同的EditText(按钮默认情况下不可调焦)时才会进行计算。 2.)将按钮更改为可调焦,以便用户必须按两次按钮。后者比第一种更好,因为用户可能会将未计算的值存储在1.)中。 – 2012-02-24 09:23:32

+0

也许你应该重新考虑一下你的应用程序的设计,它到底想要做什么?当重新设计可以帮助解决您的问题时,您可能会过度复杂化您的代码。另外你的代码有一些问题,你不需要创建一个焦点侦听器并将edittext传递给构造函数。当onFocusChanged被调用时,它会通过你的焦点改变的视图,只是将view参数转换为一个编辑文本(首先检查它的类型!)。 – Theblacknight 2012-02-24 10:08:19

+1

链接给出:“错误404 - 找不到文件”。 – astuter 2015-11-02 11:10:38