18

データを入力するための 4 つのテキスト フィールドを持つアプリケーションを開発していますが、フォーカスを別のフィールドに移動するときにパフォーマンスの問題が発生しました。フィールドに文字が入力されている場合、addTextChangedListener を使用してテキストを監視し、フォーカスを次のテキスト フィールドに移動します。これは、Android 4.1.1 より前のバージョンでは問題なく動作していましたが、4.1.1 でのテスト以降、次のフィールドにフォーカスが表示される前にキーを押すと、顕著な遅延が発生します。これは、ユーザーがすばやく入力すると、キーを押したことが失われる可能性があることを意味します。

次のコードを使用した簡単なアプリがあります

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    one = (EditText)findViewById(R.id.editText1);
    two = (EditText)findViewById(R.id.editText2);

    one.addTextChangedListener(new TextWatcher() {


        @Override
        public void afterTextChanged(Editable s) {
            two.requestFocus();

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }
    });
}

問題を浮き彫りにします。4.0.4 ベースのデバイスで実行すると問題ありませんが、4.1.1 ではフォーカスを移動するのに時間がかかります。

4.0.4 と 4.1.1 の 2 つの異なる Samsung Galaxy s3 でこれをテストしました。

他の誰かがこれを見たことがありますか?

どうもありがとう

ポール

4

1 に答える 1

12

その問題の解決策があるかどうかはわかりません...しかし、問題が存在している間に別の解決策を提供する「ハック」があるかもしれません:

  1. EditText を画面の外に出します。(私は通常、RelativeLayout で右マージンの右側に設定します)。

  2. onTouchListener可視の EditText に設定します (EditText をクリックできないように設定します)。非表示のonTouchListenerEditText にフォーカスする必要があります。

  3. 非表示の EditText セットでは、addTextChangedListener追加または削除された文字ごとに、表示されている EditText に適切な変更を加えます。

例:

ID を持つ PIN の 4 つの EditTexts: ABCおよびDid を持つ画面外の EditText がある場合hidden:

で最初の文字を受け取るたびに、hidden書き込みAます。

2番目の文字を受け取るたびに、hidden書き込みBます。

の 2 番目の文字で削除を受け取るたびに、hidden私は削除しBます。

...

問題なく、アプリの1つで同様のことをしています。

于 2012-12-12T18:58:05.313 に答える