2016-12-04 71 views
1

我有一套由for循环生成的EditText字段。每次编辑该字段时,我需要运行一些计算并更新其他文本字段(请考虑Excel电子表格总和)。检测解除键盘(通过后退按钮)在EditText

我的逻辑正在工作,我甚至设置了将最后一个字段的向下焦点更改替换为第一个字段(以避免键盘上显示“完成”按钮)。

但是,如果用户按下“后退”按钮关闭键盘,焦点不会改变,计算也不会完成。输入的数字不同,但现在总数是错误的。当键盘被解散时,我无法找到检测到的位置,所以我可以解决这个问题。

我现在拥有的一切:

final EditText etWeight = new EditText(this); 
etWeight.setText("initWt"); 
etWeight.setSelectAllOnFocus(true); 
etWeight.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View view, boolean b) { 
     //code to update after weight is changed 
    } 
)); 
llWeightRow.addView(etWeight); 

我也试图把这个代码setOnEditorActionListenersetOnClickListenersetOnKeyListener

除了其中一些未按预期工作,如果按下后退按钮以关闭键盘,它们都不会触发。我在网上搜索,但只提出了如何用我自己的按钮手动隐藏键盘的建议;我似乎无法找到有关平板电脑本身后退按钮的任何信息。

我怎样才能检测到键盘已被解雇,所以我可以强制更改焦点(或只是重新运行计算代码)?

更新: 没有标记这个作为回答,因为这不回答这个特定的问题,但我目前通过切换到onTextChanged方法生产所需的我的结果(等领域不断更新)。现在,只要EditText内的任何文本被更改,值就会更新。

etWeight.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence cs, int i, int i1, int i2) { 
    } 
    @Override 
    public void onTextChanged(CharSequence cs, int i, int i1, int i2) { 
     //calc and update code 
    } 
    @Override 
    public void afterTextChanged(Editable editable) { 
    } 
}); 

回答

0

试试这个

InputMethodManager imm = (InputMethodManager) ActivityName.this.getSystemService(Context.INPUT_METHOD_SERVICE); 

     if (imm.isAcceptingText()) { 
      Log.d(TAG,"Software Keyboard was shown"); 
     } else { 
      Log.d(TAG,"Software Keyboard was not shown"); 
     } 
+0

但我会从哪里调用?我的问题并不是我无法弄清楚如何检测键盘是否存在,以及当按下后退按钮来解除键盘时,我无法找到适当的“onWhatever”。 –

+0

第一次后退按钮并不是解除你的键盘的唯一方法。所以关注与相关的键盘火灾事件的可见性不与后退按钮,你可以在onCreate里面读取关于android:imeOptions –

0

你试过覆盖onBackPressed?你可以在那里进行操作。

@Override 
public void onBackPressed() { 
    // Make needed preparations here 
    super.onBackPressed(); 
} 
+0

试过(put “getCurrentFocus()。clearFocus();”在那里)。如果我更改了一个值并按下后退按钮,键盘将被解除,但EditText保留焦点。如果我再次按下后退按钮,该活动将被解散,但我可以看到该领域失去焦点,并且在活动消失之前更新我的数字。它看起来不像onBackPressed被称为如果后退按钮只是驳回键盘。 –