2017-07-27 2 views
1

Ich verwende PlacesAutoCompleteFragment und fügte einen PlaceSelectionListener hinzu. Es funktioniert gut, wenn der Benutzer tatsächlich auf einen Ort klickt und die Methode onPlaceSelected ausgelöst wird.Android PlacesAutoCompleteFragment trigger onPlaceSelected

Aber ich habe einige Fälle, wenn ich einen Text in der Ortssuchleiste programmatisch setzen und dann die onPlaceSelected Methode auslösen muss.

Ich habe die Methode setText verwendet, um den Text programmatisch einzugeben, aber die onPlaceSelected wird nicht ausgelöst. Gibt es eine Möglichkeit, es programmatisch auszulösen?

PlacesAutocompleteFragment autocompletePlacesFragment; 

@Override 
protected void onCreate(Bundle saveInstanceState) 
{ 
    .... 
    autocompletePlaceFragment = (PlaceAutocompleteFragment)getFragmentManager().findFragmentById(R.id.places_frament); 
    placesFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() 
    { 
     @Override 
     public void onPlaceSelected(Place place) 
     { 
       Log.d("TAG","onPlaceSelected"); 
     } 

     @Override 
     public void onError(Status status) 
     { 
       Log.d("TAG", "onError"); 
     } 
    }); 

    //Now when I use this method, I want to trigger onPlaceSelected.. 
    autocompletePlaceFragment.setText("Washington"); 
} 

Antwort

0

So, nachdem ich eine Zeit lang überprüft, wie ein Place mit einem String zu erhalten, die Antwort ist, dass gerade jetzt für Sie nicht können.

Platz ist eine Schnittstelle, die GooglePlaces uns gibt. Es hat einige Methoden wie getId(), getName(), etc ..

Was ich versuche zu tun, wenn ich eine Zeichenfolge, die eine Adresse enthält, zum Beispiel „Washington“ ist die onPlaceSelected Methode auszulösen und dann die latitude und longitude, dass Place uns gibt.

Sie können die onPlaceSelected-Methode auslösen, indem Sie einen PlaceSelectionListener als Klassenmitglied erstellen.

zum Beispiel:

PlaceSelectionListener listener = new PlaceSelectionListener() 
{ 
    @Override 
    public void onPlaceSelected(Place place) 
    { 
     Log.d("TAG","onPlaceSelected"); 
    } 

    @Override 
    public void onError(Status status) 
    { 
     Log.d("TAG","onError"); 
    } 
}; 

, nachdem Sie diesen Zuhörer haben, können Sie es verwenden:

listener.onPlaceSelected(yourPlace); 

Beachten Sie, dass das Verfahren einen Platz Variable als Parameter erfordert .. es nicht String annehmen können, wie ich schon sagte, für jetzt .. PlacesApi nicht geben Sie eine Methode, um einen Platz von einer Zeichenfolge .. so müssen Sie eine gültige Platzieren Objekt, um Ihnen diese Methode.

wie für meine Anwendung fand ich eine andere Lösung und ich verwendete den Android Geocoder stattdessen gibt mir die richtige Breite und Länge für eine Adresse.

Verwandte Themen