forループによって生成されたフィールドがEditText
個あります。そのフィールドが編集されるたびに、私はいくつかの計算を実行し、他のテキストフィールドを更新する必要があります(スプレッドシートの合計を考えてみてください)。EditTextのキーボードの解除を確認する(戻るボタンで)
ロジックが機能していて、最後のフィールドのフォーカスを最初のフィールドに置き換えるように設定していることもあります(キーボードに「完了」ボタンが表示されないようにする)。
ただし、ユーザーがキーボードを閉じるために[戻る]ボタンを押すと、フォーカスは変更されず、計算も行われません。入力された数字は異なりますが、合計が間違っています。私はこれを回避することができるようにキーボードが却下されたときにどこを検出するのかわかりません。私もsetOnEditorActionListener
、setOnClickListener
、およびsetOnKeyListener
にこのコードを入れて試してみました
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);
:私は今持っている
。
これらのうち一部が期待どおりに機能しないことを除いて、戻るボタンを押してキーボードを閉じると、いずれも起動しないように見えます。私はオンラインで検索しましたが、自分のボタンで手動でキーボードを隠す方法の提案が出ました。私はタブレット自体のバックボタンに関するものを見つけることができないようです。
フォーカスを強制的に変更する(または計算コードを再実行する)ようにキーボードが切断されたことを検出するにはどうすればよいですか?
更新:これは、この特定の質問に答えていないので、答えよう は、このマーキングはないが、私は現在、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の中で実行できます。imeOptions –