Java 在键入Android EditText时如何调用函数

Java 在键入Android EditText时如何调用函数,java,android,android-edittext,Java,Android,Android Edittext,这是我的设想。我想在EditText中集成一个搜索功能。但我不希望它是一个外部按钮,我希望在编辑框中键入时调用该函数 我怎样才能做到这一点?谢谢。您需要一个TextWatcher来编辑您的EditText。当附加的EditText中的文本发生更改时,将调用这三个回调 yourEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequ

这是我的设想。我想在EditText中集成一个搜索功能。但我不希望它是一个外部按钮,我希望在编辑框中键入时调用该函数


我怎样才能做到这一点?谢谢。

您需要一个
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
        }
    });
您可以在文档中找到更多详细信息,您可以使用

,它是一个可编辑的文本视图,在用户键入时显示完成建议

公共类CountriesActivity扩展活动{
创建时受保护的空隙(捆绑冰柱){
超级冰柱;
setContentView(R.layout.countries);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_下拉列表_项目_1行,国家/地区);
AutoCompleteTextView文本视图=(AutoCompleteTextView)
findViewById(R.id.国家/地区列表);
setAdapter(适配器);
}
私有静态最终字符串[]国家/地区=新字符串[]{
“比利时”、“法国”、“意大利”、“德国”、“西班牙”
};
}

您可以为您的编辑框实现一个textwatcher,在ContextChanged事件中,首先查看您是否输入了最小字符数,例如,如果输入长度大于或等于3,则启动一个计时器,该计时器将在2秒后执行。但是如果您再次更改了ContextChanged,请取消并清除上一个计时器,然后重新设置。大概是这样的:

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;
    }
}

你的问题不清楚
private void cancelTimer(){
    if (searchScheduleTimer != null){
        searchScheduleTimer.cancel();
        searchScheduleTimer.purge();
        searchScheduleTimer = null;
    }
}