在我的Android项目中,我必须将 TextChangedListener (TextWatcher)添加到编辑文本 View 中。它包括三个部分:

  • onTextChanged()
  • beforeTextChanged()
  • afterTextChanged()

  • 这三个有什么区别?我不得不在键监听器上实现对表的搜索,对于我来说,这三个表看起来都一样。它们的功能也相同。当我输入产品名称的一部分时,该表将仅使用其中包含输入文字的那些产品进行重绘。但是我使用了afterTextChanged()部分。我的代码是:
    EditProduct.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub
    
                // System.out.println("onTextChanged"+s);
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
                // System.out.println("beforeTextChanged"+s);
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                // System.out.println("afterTextChanged"+s);
    
                String new_prx = s.toString();
    
                System.out.println(s);
                mini_productList = new ArrayList<Product>();
    
                // mini_productList
                int count = 0;
                if (new_prx.equals("")) {
    
                    loadtableProducts(productList);
    
                } else {
    
                    for (int i = 0; i < productList.size(); i++) {
    
                        if (productList.get(i).getDescription().toString()
                                .substring(0, (new_prx.length()))
                                .equalsIgnoreCase(new_prx)) {
                            mini_productList.add(productList.get(i));
                            count++;
    
                        }
                    }
    
                    loadtableProducts(mini_productList);
                }
            }
        });
    

    那么有人可以给我解释这三个方面吗?

    最佳答案

    onTextChanged在文本更改期间运行。

    文字更改后,afterTextChanged立即运行。
    beforeTextChanged在更改文本之前立即运行。

    根据要分配变量或执行操作的时间,可能要在更改之前或之后运行代码。

    这是一个例子:

    String afterTextChanged = "";
    String beforeTextChanged = "";
    String onTextChanged = "";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        et = (EditText)findViewById(R.id.editText);
    
        et.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int st, int b, int c)
            {
                onTextChanged = et.getText().toString();
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int st, int c, int a)
            {
                beforeTextChanged = et.getText().toString();
            }
    
            @Override
            public void afterTextChanged(Editable s)
            {
                afterTextChanged = et.getText().toString();
                Toast.makeText(Activity.this, "before: " + beforeTextChanged
                                               + '\n' + "on: " + onTextChanged
                                               + '\n' + "after: " + afterTextChanged
                               ,Toast.LENGTH_SHORT).show();
            }
        });
    }
    

    在这种情况下,假设您将文本从“h”更改为“hi”,输出将是:

    关于android - TextWatcher的onTextChanged,beforeTextChanged和afterTextChanged之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20278382/

    10-08 23:40