如何在输入 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;
    }
}