Android AutoCompleteTextView:在TextChange上只执行一次AsyncTask调用

时间:2016-04-12 06:16:08

标签: android android-asynctask autocomplete

我的布局中有一个AutoCompleteTextView。在用户输入第一个字符后,我想进行API调用,这是我在AsyncTask中进行的。我已经使用了addTextChangedListener,并且我正在对TextChanged进行API调用。但问题是,每次用户对AutoCompleteTextView进行任何更改时,API调用都会完成。

但是我希望API调用只发生一次,即在输入第一个字符之后。我如何实现这一目标?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_places_search);
    search_airport = (AutoCompleteTextView) findViewById(R.id.place_search);
    autocompleteadapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, airports);
    search_airport.setAdapter(autocompleteadapter);
    search_airport.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mAirport = new AsyncTaskAirport(search_airport.getEditableText().toString().substring(0, 1));
            mAirport.execute((Void) null);

        }

        @Override
        public void afterTextChanged(Editable s) {


        }
    });


}

2 个答案:

答案 0 :(得分:1)

试试这个,

str = load '/home/abhijit/Downloads/m.txt' AS (str:chararray);

答案 1 :(得分:0)

你可以用计时器来解决你的问题。这就是

@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
    int COMPLETION_DELAY = 2000;
    if (timer != null)
    {
        timer.cancel();
        timer.purge();
        timer = null;
    }
    timer = new Timer();
    timer.schedule(new TimerTask()
    {
        @Override
        public void run()
        {
            new Handler(Looper.getMainLooper()).post(new Runnable()
            {
                @Override
                public void run()
                {
                    if (s.toString().length() >= appCompatAutoCompleteTextView.getThreshold())
                    {
                         //CALL WebService Here
                    }
                }
            });
        }
    }, COMPLETION_DELAY);
}

现在,当用户在输入自动完成时进行更改时,将不会调用您的服务。只有在用户停止+ 2秒后才会调用服务。