如何输入Android EditText时如何调用函数

时间:2015-04-16 11:11:59

标签: java android android-edittext

这是我的情景。我想将EditText集成到搜索功能中。但是我不希望它成为一个外部按钮,我想在EditBox中键入该函数。

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

3 个答案:

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