2016-12-04 60 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被稱爲如果後退按鈕只是駁回鍵盤。 –