Ziel vorschlagen: ein paar Strings aus webservice und bevölkern AutoCompleteTextView mit them.ThisAutoCompleteTextView nicht nur für FIRST SUCHE
ich will, ist einfach zu bekommen, aber was will ich eigentlich suchen (aufrufen webservice) beginnen beim Tippen fertig.
Ich meine, zum Beispiel, ich etwas eingeben und 3 Sekunden nach der Eingabe beendet, AutoCompleteTextView würde gefüllt und Vorschläge angezeigt werden.
Was ich bisher tat:
Wie Sie in der unten stehenden Code sehen können, habe ich eine CountDownTimer dies zu erreichen. Ich setze es 3 Sekunden und starte es in OnTextChanged. Als Benutzertyp lösche ich CountDownTimer und erstelle eine neue Instanz davon und starte es erneut.
Also, wann immer Benutzer -on jede Taste drücken- Ich setze Zähler zurück.
Danach, rufe ich meine Methode - die Webservice aufrufen und AutoCompleteTextView auffüllen - in CountFortTimer OnFinish().
Problem:
Wenn ich die Eingabe fertig ist, alles wie erwartet funktioniert, wie ich im Debug-Modus sehen. Aber Vorschläge kommen nicht nur für die erste Suche.
Ich meine, es funktioniert auch, aber AutoCompleteTextView wird nicht nur für ERSTE MAL mit Daten gefüllt.
Hinweis:
Ich rufe Webservice sowohl synchrone als auch asynchrone Art und Weise.
counter=new MyCount(3000, 1000);
autoComplete.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable editable) {
if(isBackPressed){ //catch from KeyListener, if backspace is pressed don't invoke web service
isBackPressed=false;
return;
}
String newText = editable.toString();
searchText=newText;
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(isBackPressed){
isBackPressed=false;
return;
}
counter.cancel();
counter=new MyCount(3000, 1000);
counter.start();
}
});
Hier ist meine CountDownTimer Klasse
public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
invoke_webservice(searchText);
}
@Override
public void onTick(long millisUntilFinished) {
}
}
Hier ist meine Methode, webservice in synchronen Weise
public void invoke_webservice(String key){
try{
. //code to invoke webservice and populate string [] results
.
.
aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item,results);
autoComplete.setAdapter(aAdapter);
aAdapter.notifyDataSetChanged();
}
Hier aufzurufen ist meine Methode Webservice in asynchron
class getJson extends AsyncTask<String,String,String>{
@Override
protected String doInBackground(String... key) {
String newText = key[0];
. //code to invoke webservice and populate string [] results
.
.
runOnUiThread(new Runnable(){
public void run(){
aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item,results);
autoComplete.setAdapter(aAdapter);
aAdapter.notifyDataSetChanged();
}
});
return null;
}
}
aufzurufen
Vielen Dank im Voraus
bitte nicht doppelte Beiträge für das gleiche Problem hinzufügen, füge deine Beiträge, damit die Leute ihre Zeit nicht verschwenden suchen und beide Beiträge zu beantworten. Dies wird in der Regel als Spamming betrachtet http://StackOverflow.com/Questions/10143308/Android-AutocompletedTextview-Filter-ISFire-Late-for-the-first-search-only – Mayank
@Mayank der Link oben funktioniert nicht ... überprüfen Sie bitte –
Ich denke, Benutzer haben seinen Beitrag gelöscht, deshalb funktioniert der Link nicht mehr. Er hatte die gleiche Frage in einem anderen Post, also habe ich ihn darauf hingewiesen, dass es keine gute Idee ist, das zu tun und als Spamming betrachtet werden kann. – Mayank