我的布局中有一个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) {
}
});
}
答案 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秒后才会调用服务。