Android的电平变化的EditText监听Android的电平变化的EditText监听(and

2019-06-02 15:45发布

我知道一点点TextWatcher但触发您所输入的每一个字符。 我想时触发的用户完成编辑的侦听器。 可能吗? 此外,在TextWatcher我得到的实例, Editable ,但我需要的一个实例EditText 。 我如何获得的?

编辑 :第二个问题更重要。 请回答这个问题。

Answer 1:

首先,你可以看到,如果用户完成编辑文本如果EditText失去焦点,或者如果用户按下完成按钮(这取决于你实现什么适合最适合你)。 其次,你不能让一个EditText的内实例TextWatcher只有当你需要声明EditText作为一个实例对象。 即使你不应该修改EditText的内TextWatcher ,因为它不是安全的。

编辑:

为了能够获得EditText实例为您TextWatcher实现,你可以尝试这样的事:

public class YourClass extends Activity {

    private EditText yourEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        yourEditText = (EditText) findViewById(R.id.yourEditTextId);

        yourEditText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

                // you can call or do what you want with your EditText here

                // yourEditText... 
            }

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

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

需要注意的是,上述样本可能有一些错误,但我只是想告诉你一个例子。



Answer 2:

任何使用ButterKnife。 你可以使用这样的:

@OnTextChanged(R.id.zip_code)
void onZipCodeTextChanged(CharSequence zipCode, int start, int count, int after) {

}


Answer 3:

这是困扰我的是执行我的所有的EditText字段的听众要求我有丑陋的,冗长的代码,所以我写了下面的类。 可能是任何人绊在这个有用。

public abstract class TextChangedListener<T> implements TextWatcher {
    private T target;

    public TextChangedListener(T target) {
        this.target = target;
    }

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

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

    @Override
    public void afterTextChanged(Editable s) {
        this.onTextChanged(target, s);
    }

    public abstract void onTextChanged(T target, Editable s);
}

现在实现一个监听器是一点点清洁。

editText.addTextChangedListener(new TextChangedListener<EditText>(editText) {
            @Override
            public void onTextChanged(EditText target, Editable s) {
                //Do stuff
            }
        });

至于它触发多久,一个也许可以实现一个检查来运行其所需的代码//Do stuff后给予



Answer 4:

我一直在使用做到了AutotextView

AutotextView textView = (AutotextView) findViewById(R.id.autotextview);
textView.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
        seq = cs;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {

    }

    @Override
    public void afterTextChanged(Editable arg0) {
        new SearchTask().execute(seq.toString().trim());
    }

});


Answer 5:

 myTextBox.addTextChangedListener(new TextWatcher() {  

    public void afterTextChanged(Editable s) {}  

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

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

    TextView myOutputBox = (TextView) findViewById(R.id.myOutputBox);  
    myOutputBox.setText(s);  

    }  
});  


Answer 6:

TextWatcher没有为我工作,因为它继续射击每一个EditText和搞乱对方的价值观。

这里是我的解决方案:

public class ConsultantTSView extends Activity {
    .....

    //Submit is called when I push submit button.
    //I wanted to retrieve all EditText(tsHours) values in my HoursList

    public void submit(View view){

        ListView TSDateListView = (ListView) findViewById(R.id.hoursList);
        String value = ((EditText) TSDateListView.getChildAt(0).findViewById(R.id.tsHours)).getText().toString();
    }
}

因此,通过使用getChildAt(xx)方法可以检索在任何项目ListView ,并使用获得的单个项目findViewById 。 它将然后给最近的值。



Answer 7:

至于我能想到它回合的话,只有两种方法可以做到这一点。 你怎么能知道用户已经写完一个字? 无论是在焦点消失,或点击“确定”按钮。 有没有办法在我心中,你可以知道用户按下的最后一个字符...

于是呼onFocusChange(View v, boolean hasFocus)或添加一个按钮,点击收听它。



文章来源: android edittext onchange listener