我有一套由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);
我也試圖把這個代碼setOnEditorActionListener
,setOnClickListener
和setOnKeyListener
。
除了其中一些未按預期工作,如果按下後退按鈕以關閉鍵盤,它們都不會觸發。我在網上搜索,但只提出了如何用我自己的按鈕手動隱藏鍵盤的建議;我似乎無法找到有關平板電腦本身後退按鈕的任何信息。
我怎樣才能檢測到鍵盤已被解僱,所以我可以強制更改焦點(或只是重新運行計算代碼)?
更新: 沒有標記這個作爲回答,因爲這不回答這個特定的問題,但我目前通過切換到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) {
}
});
但我會從哪裏調用?我的問題並不是我無法弄清楚如何檢測鍵盤是否存在,以及當按下後退按鈕來解除鍵盤時,我無法找到適當的「onWhatever」。 –
第一次後退按鈕並不是解除你的鍵盤的唯一方法。所以關注與相關的鍵盤火災事件的可見性不與後退按鈕,你可以在onCreate裏面讀取關於android:imeOptions –