有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何向EditText组件添加TextChangedListener?

我是安卓编程新手。我遇到了一个问题,很难应用本主题中给出的解决方案: How to format the input of EditText when typing with thousands separators (,) in Android?

到目前为止,我已经制作了一个单独的Java文件,并在其中粘贴了主代码,但我不知道如何“将editText.addTextChangedListener(新的NumberTextWatcher(editText));添加到我的editText组件”。 我的XML编辑文本如下所示:

        <EditText
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:inputType="number"
        安卓:id="@+id/editText"
        安卓:layout_weight="1"

        />

共 (5) 个答案

  1. # 1 楼答案

    用黄油刀

    @OnTextChanged(value = { R.id.firstNameEditText, R.id.lastNameEditText },
        callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    void inputName(EditText editText, Editable editable) {
    // Greet user...
    }
    

    附言

    http://craftedcourses.io/all-about-butter-knife-part-1/

  2. # 2 楼答案

    您也可以使用Butterknife进行此操作

    @OnTextChanged(value = R.id.etName, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    public void nameChanged(CharSequence text) {
        //do stuff
    }
    

    更新:Kotlin扩展

    fun EditText.afterTextChanged(onAfterChangeText: (String) -> Unit) {
        this.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            }
    
            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            }
    
            override fun afterTextChanged(editable: Editable?) {
                onAfterChangeText(editable.toString())
            }
        })
    }
    

    用法:

    editText.afterTextChanged {
    //do stuff
    }
    

    科特林(无扩展):

    editText.doAfterTextChanged {
        //do stuff
    }
    
  3. # 3 楼答案

    在“活动”中,获取编辑文本引用:

    EditText et = (EditText) findViewById(R.id.editText);
    et.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    
        }
    
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    
        }
    
        @Override
        public void afterTextChanged(Editable editable) {
    
        }
    });
    
  4. # 4 楼答案

    首先将EditText变量定义为类中的实例变量

    private EditText mEditText; 
    

    然后在某些地方,例如onCreate或onViewCreated,您可以初始化EditText并添加侦听器

    mEditText = (EditText)findViewById(R.id.edit_text);
    mEditText.addTextChangedListener(new TextWatcher() {
    
        @Override
        public void afterTextChanged(Editable s) {
    
        }
    
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
        }
    
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // Get changed text s here and use it 
        } 
    
    });
    
  5. # 5 楼答案

    首先,您需要在活动或片段中找到EditText元素,如:

    EditText editText = (EditText) findViewById(R.id.editText);
    

    那你应该能做到

    editText.addTextChangedListener()
    

    我建议你去看看巴特奈夫图书馆。如果你有很多监听器,它会使你的代码更有条理

    你可以简单地做

    @OnTextChanged(R.id.editText)
    public void listener() {}