0

ユーザーが EditText に対して行った変更 (挿入または削除) を取得しようとしています。TextWatcher を使用していますが、正しい結果が得られません。さらに、「getChar(start, end) has end before start」というエラーが発生することもあります。

editText = (EditText) findViewById(R.id.MyEditText);
editText.addTextChangedListener(new TextWatcher() {

    @override
    public void afterTextChanged(Editable s){}

    @override
    public void beforeTextChanged(CharSequence s, int start, int count, int after){

        showToast("text removed: " + s.subSequence(start, count));
    }

    @override
    public void onTextChanged(CharSequence s, int start, int before, int count){

        showToast("text added: " + s.subSequence(start, count));

    }



}

ご覧beforeTextChangedのとおり、ユーザーによって削除されたテキストを取得し、onTextChanged挿入するために使用します。ここで光を当ててください。ありがとう!

API はここにあります: http://developer.android.com/reference/android/text/TextWatcher.html#afterTextChanged(android.text.Editable)

編集:

私はそれを理解しているようです...それはかなりばかげています:s.subSequence(start, count))本当にそうあるべきですs.subSequence(start, start+count))

4

2 に答える 2

0

これを試してみてください。残りの単語(挿入/更新後)が必要か、文字(追加/削除後)が必要かわかりません。

public class MainActivity extends Activity implements TextWatcher {

private EditText myEditText;
private String inputText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    myEditText = (EditText) findViewById(R.id.testEditText);
    myEditText.addTextChangedListener(this);
}

@Override
public void afterTextChanged(Editable s) {      
    if (inputText.length() < s.toString().length()) {
        Toast.makeText(
                this,
                ("Text Added: " + s.toString().substring(inputText.length(),
                        s.toString().length())), Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(
                this,
                ("Text Removed: " + inputText.substring(s.toString().length(),
                        inputText.length())), Toast.LENGTH_SHORT).show();
    }
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    inputText = s.toString();
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

}

于 2014-01-27T05:09:52.030 に答える
0

関数を内部に保持して、afterTextChanged何が起こるかを確認してください

サンプルコード

seachbox.addTextChangedListener(new TextWatcher() {

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

            fillData(SEARCH_ORDER ,s.toString());
        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub


    });

うまくいくことを願っています

于 2014-01-27T04:07:55.807 に答える