这是我的情景。我想将EditText集成到搜索功能中。但是我不希望它成为一个外部按钮,我想在EditBox中键入该函数。
我怎样才能做到这一点?谢谢。
答案 0 :(得分:9)
TextWatcher
需要EditText
。当附加的EditText
中的文本更改
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
中找到更多详细信息答案 1 :(得分:1)
您可以使用
AutoCompleteTextView,这是一个可编辑的文本视图,可在用户输入时显示完成建议。
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"
};
}
答案 2 :(得分:0)
你可以为你的编辑框实现一个textwatcher,并在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) {
}
};
将textwatcher设置为您的edittext。
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;
}
}