2016-12-04 23 views
1

forループによって生成されたフィールドがEditText個あります。そのフィールドが編集されるたびに、私はいくつかの計算を実行し、他のテキストフィールドを更新する必要があります(スプレッドシートの合計を考えてみてください)。EditTextのキーボードの解除を確認する(戻るボタンで)

ロジックが機能していて、最後のフィールドのフォーカスを最初のフィールドに置き換えるように設定していることもあります(キーボードに「完了」ボタンが表示されないようにする)。

ただし、ユーザーがキーボードを閉じるために[戻る]ボタンを押すと、フォーカスは変更されず、計算も行われません。入力された数字は異なりますが、合計が間違っています。私はこれを回避することができるようにキーボードが却下されたときにどこを検出するのかわかりません。私もsetOnEditorActionListenersetOnClickListener、および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) { 
    } 
}); 

答えて

0

あなたがonBackPressedを上書きしようとしたことがあり、この

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の中で実行できます。imeOptions –

0

を試してみてください?そこに焦点を当てて操作することができます。

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

試してみました"getCurrentFocus()。clearFocus();"がそこにあります)。値を変更して戻るボタンを押すと、キーボードは消えますが、EditTextはフォーカスを保持します。戻るボタンをもう一度押すとアクティビティは終了しますが、アクティビティがなくなる直前にフィールドのフォーカスが失われ、数値が更新されます。戻るボタンがキーボードを単に破棄した場合、onBackPressedは呼び出されません。 –

関連する問題