2012-12-24 4 views
8

Ich habe eine SearchView in der Aktionsleiste und ich möchte den Vorschlag von einem Dienst abgerufen werden. Ich habe eine Probe im Android Samples Searchable Dictionary gesehen. aber es lädt die Ergebnisse von einer lokalen Datenbank.Android Searchview Vorschlag aus dem Netzwerk

Ich habe das, es ist notwendig, die Content Provider zu verwenden. aber ich frage mich, wann das Ergebnis aus dem Web-Service abrufen. Ich meine, wann ich einen Netzwerkanruf machen muss. Bitte kann jemand helfen.

Antwort

0

Wenn Sie also eine Suche verwenden in Ihr Projekt und wollen die Vorschläge zeigen Ihnen zwei Methoden implementieren können dort

/** 
     * Called when the user submits the query. This could be due to a key press on the 
     * keyboard or due to pressing a submit button. 
     * The listener can override the standard behavior by returning true 
     * to indicate that it has handled the submit request. Otherwise return false to 
     * let the SearchView handle the submission by launching any associated intent. 
     * 
     * @param query the query text that is to be submitted 
     * 
     * @return true if the query has been handled by the listener, false to let the 
     * SearchView perform the default action. 
     */ 
     boolean onQueryTextSubmit(String query); 

     /** 
     * Called when the query text is changed by the user. 
     * 
     * @param newText the new content of the query text field. 
     * 
     * @return false if the SearchView should perform the default action of showing any 
     * suggestions if available, true if the action was handled by the listener. 
     */ 
     boolean onQueryTextChange(String newText); 

Wie Sie aus der Dokumentation sehen, wie diese Methoden arbeiten. Solange der Benutzer onQueryTextChange eingibt, wird die Methode aufgerufen und jedes Mal, wenn ein neues Schlüsselwort eingegeben oder gelöscht wird, wird es aufgerufen.

In dieser Methode können Sie den Server aufrufen, um die Vorschläge zu erhalten und dem Benutzer zu geben.

Nun, wenn der Benutzer zB nach suchen möchte. "Apfel", so dass es keinen Sinn macht, Server für jedes Schlüsselwort zu treffen, wie Trefferserver für "a" dann "ap" danach "app" und so weiter,

so wäre es besser, den Server einmal zu treffen Der Benutzer beendet die Eingabe in der Suchansicht, die Sie mit dem Handler und Runnable so behandeln können.

  Handler mHandler; 
     String mQueryText; 


     @Override 
      public boolean onQueryTextChange(final String newText) { 
       mQueryText=newText; 
       //Make if invisible once you get the data. 
       mProgressBar.setVisibility(View.VISIBLE); 
       mHandler.removeCallbacks(mRunnable); 
       mHandler.postDelayed(mRunnable,200); 
       return true; 
       } 

    private Runnable mRunnable =new Runnable() { 
     @Override 
     public void run() { 

     //Hit server here. 

     } 
    }; 

Während Sie den Server treffen und die Daten bekommen können Sie Fortschrittsbalken oder etwas zeigen.

Sie können die gleiche Logik mit dem EditText https://developer.android.com/reference/android/widget/EditText.html anwenden. Hoffe es hilft.