如何在输入 Android EditText 时调用函数
How can I call a function as I type in an Android EditText
这是我的场景。我想将搜索功能集成到 EditText 中。但我不希望它成为一个外部按钮,我想在编辑框中输入时调用该功能。
我怎样才能做到这一点?谢谢。
您的 EditText
需要一个 TextWatcher
。这三个回调是在文本的时候调用的,在附件中EditText
changes
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@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
}
});
您可以在文档中找到更多详细信息,here
您可以使用
AutoCompleteTextView, It is an editable text vview that shows completion suggestions as the user types.
public class CountriesActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.countries);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, COUNTRIES);
AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.countries_list);
textView.setAdapter(adapter);
}
private static final String[] COUNTRIES = new String[] {
"Belgium", "France", "Italy", "Germany", "Spain"
};
}
您可以为您的编辑框实现一个文本观察器,并在 onTextChanged 事件中首先查看您输入的字符数是否最少,例如3 如果输入的长度大于或等于 3,则启动一个计时器,该计时器将在 2 秒后执行。但是如果你再次得到 onTextChanged 取消并清除以前的计时器并重新设置它。像这样:
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() >= 3){
scheduleTimer(); //Reschedule timer.
}else{
cancelTimer(); //cancel scheduled timer
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
将文本观察器设置为您的编辑文本。
et_search_box.addTextChangedListener(textWatcher);
定时器的调度方法
Timer searchScheduleTimer = null;
private void scheduleTimer(){
cancelTimer();
searchScheduleTimer = new Timer("search_scheduler");
searchScheduleTimer.schedule(new TimerTask() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//do your processing here.
}
});
}
}, 1500);
}
定时取消方法。
private void cancelTimer(){
if (searchScheduleTimer != null){
searchScheduleTimer.cancel();
searchScheduleTimer.purge();
searchScheduleTimer = null;
}
}
这是我的场景。我想将搜索功能集成到 EditText 中。但我不希望它成为一个外部按钮,我想在编辑框中输入时调用该功能。
我怎样才能做到这一点?谢谢。
您的 EditText
需要一个 TextWatcher
。这三个回调是在文本的时候调用的,在附件中EditText
changes
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@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
}
});
您可以在文档中找到更多详细信息,here
您可以使用
AutoCompleteTextView, It is an editable text vview that shows completion suggestions as the user types.
public class CountriesActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.countries);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, COUNTRIES);
AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.countries_list);
textView.setAdapter(adapter);
}
private static final String[] COUNTRIES = new String[] {
"Belgium", "France", "Italy", "Germany", "Spain"
};
}
您可以为您的编辑框实现一个文本观察器,并在 onTextChanged 事件中首先查看您输入的字符数是否最少,例如3 如果输入的长度大于或等于 3,则启动一个计时器,该计时器将在 2 秒后执行。但是如果你再次得到 onTextChanged 取消并清除以前的计时器并重新设置它。像这样:
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() >= 3){
scheduleTimer(); //Reschedule timer.
}else{
cancelTimer(); //cancel scheduled timer
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
将文本观察器设置为您的编辑文本。
et_search_box.addTextChangedListener(textWatcher);
定时器的调度方法
Timer searchScheduleTimer = null;
private void scheduleTimer(){
cancelTimer();
searchScheduleTimer = new Timer("search_scheduler");
searchScheduleTimer.schedule(new TimerTask() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//do your processing here.
}
});
}
}, 1500);
}
定时取消方法。
private void cancelTimer(){
if (searchScheduleTimer != null){
searchScheduleTimer.cancel();
searchScheduleTimer.purge();
searchScheduleTimer = null;
}
}