1

私は小さなタイマーアプリと、という名前etHのEditTextウィジェットを持っています。これらのウィジェットは、入力etMetS許可し、時間の刻みを表示します。スタートボタンをクリックしてタイマーを開始すると、次のようにして操作を禁止します。

btnS.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    if (calculateMS() != 0) {
        OnTimerStartButtonClicked();
        initiateTimer();
        DisableEditTexts();
                    ...

方法:

public void DisableEditTexts() {
    etH.setFocusable(false);
    etM.setFocusable(false);
    etS.setFocusable(false);
}

リセットボタンを押すことにより、メソッドを呼び出してインタラクションを再度有効にしたいのですが、逆のことを行います(フォーカス可能をtrueに設定します)。

btnR.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        OnTimerResetButtonClicked();
        clearValues();
        EnableEditTexts();
        ...

問題:リセットボタンをクリックしても、編集テキストがフォーカス可能になりません。私が最後の方法でやっていることは

etH.setFocusable(true);
etM.setFocusable(true);
etS.setFocusable(true);

私は何が間違っているのですか?

4

3 に答える 3

3

EditText#setFocusableInTouchMode()代わりに電話してみてください:

etH.setFocusableInTouchMode(true);
// etc.

あなたが電話をするときsetFocusable(false)、舞台裏で、setFocusableInTouchMode(false)あなたのために呼ばれます。ただし、を呼び出すとsetFocusable(true)、舞台裏では何も起こらず、として残さsetFocusableInTouchMode()falseます。

電話をかけるsetFocusableInTouchMode(true)と、同様のことが起こり、あなたに電話setFocusable(true)がかけられます。そして、前と同じようにsetFocusableInTouchMode(false)、を呼び出しませんsetFocuable(false)

この癖を確認するには、ソースコードをピークにしてください。

于 2012-10-25T15:15:20.920 に答える
0

リセットボタンを押したときにEnableEditTexts()が実際に呼び出されることを確認するために、デバッグを試みましたか?

于 2012-10-25T15:15:05.437 に答える
0

フォーカスを失うには_myEditText.clearFocus()を、フォーカスを取り戻すには_myEditText.requestFocus()を試してください

于 2012-10-25T15:18:07.137 に答える