【问题标题】:Finding text change in EditText using TextWatcher使用 TextWatcher 在 EditText 中查找文本更改
【发布时间】:2014-01-27 03:47:03
【问题描述】:

我正在尝试获取用户对 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))

【问题讨论】:

    标签: java android charsequence


    【解决方案1】:

    只需将您的函数保存在 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
    
    
        });
    

    我希望它会起作用

    【讨论】:

    • ?? fillData(SEARCH_ORDER ,s.toString()); 是什么? afterTextChanged 中只有 Editable s,所以我看不出这个回调有什么帮助.. `
    • 这就是我实现的方法。你只是把你的代码放在那里..
    【解决方案2】:

    试试这个,我不确定你是想要剩下的单词(插入/更新后)还是字母(添加/删除)。

    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) {
    }
    

    }

    【讨论】:

    • 使用s.toString().substring(inputText.length() - (s.toString().length()-1 - start), s.toString().length() - (s.toString().length()-1 - start))允许在EditText中间插入字符
    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多