2

EditText に TextWatcher があります。beforeTextChanged では、EditText の値が既に変更されていることがわかりました。コードの一部を次に示します。

@Override
public void beforeTextChanged (CharSequence s, int start, int lengthBefore, int lengthAfter)
{
//      restoreValue = text.getText().toString();
  String restoreValue = s.toString();
  System.out.println ("restore |" + restoreValue + "|");
}

この関数のデバッグ出力には、EditText の元の値ではなく、変更された文字列が表示されます。"text" (EditText ウィジェット) から値を取得するか、"s" から値を取得するかは同じです。

誰もがこれについて考えられる理由を持っていますか?

4

2 に答える 2

1

動作している次のコードを試してください

public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                if(count>0)
                Log.e("MIS",""+s.toString().substring(0,count-1));
            }
于 2013-02-09T04:31:52.873 に答える
1

答えは簡単です。Android は、あなたの挿入が単語であることを想定し、それを他のテキストと区切るためにスペースを追加することで、巧妙になろうとしています。したがって、最初にスペース (おそらく 2 つのスペース - 選択した領域の両端に 1 つ) を挿入し、次にペースト バッファ テキストを挿入します。

これらのアクションごとに、beforeTextChanged が個別に呼び出されます。onTextChanged と afterTextChanged についても同様です。

したがって、貼り付けアクションの場合、最大 3 セットのコールバックを取得できます。

于 2013-02-09T17:02:51.593 に答える