2017-07-27 1 views
1

J'utilise PlacesAutoCompleteFragment et j'y ai ajouté un PlaceSelectionListener. Fonctionne correctement lorsque l'utilisateur clique sur un endroit et la méthode onPlaceSelected est déclenchée.Android PlacesAutoCompleteFragment trigger onPlaceSelected

Mais j'ai quelques cas où j'ai besoin de programmer un texte dans la barre de recherche d'endroits, puis de déclencher la méthode onPlaceSelected.

J'ai utilisé la méthode setText pour entrer le texte par programmation, mais onPlaceSelected n'est pas déclenché. est-il possible de le déclencher par programme?

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"); 
} 

Répondre

0

Donc, après avoir vérifié pendant un certain temps comment obtenir un Place en utilisant une chaîne, la réponse est que vous pouvez dès à présent pas.

Place est une interface que GooglePlaces nous offre. Il a des méthodes comme getId(), getName(), etc ..

Ce que je voulais faire quand j'ai une chaîne qui contient une adresse, par exemple « Washington » est de déclencher la méthode onPlaceSelected puis prendre la latitude et longitude que nous donne Place.

Vous pouvez déclencher la méthode onPlaceSelected en créant un objet PlaceSelectionListener en tant que membre de la classe.

par exemple:

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

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

après que vous avez cet écouteur vous pouvez l'utiliser:

listener.onPlaceSelected(yourPlace); 

Notez que la méthode nécessite une variable place en tant que paramètre .. il ne peut pas accepter String, comme je l'ai dit avant, pour l'instant .. PlacesApi ne donne pas n'importe quelle méthode pour obtenir un lieu à partir d'une chaîne .. donc vous devez avoir un objet valide pour vous cette méthode. En ce qui concerne mon application, j'ai trouvé une autre solution et j'ai utilisé l'Android Geocoder à la place, il me donne la latitude et la longitude pour une adresse.