Android PlacesAutoCompleteFragment 触发器 onPlaceSelected

Android PlacesAutoCompleteFragment trigger onPlaceSelected

我正在使用 PlacesAutoCompleteFragment 并向其添加了 PlaceSelectionListener。 当用户实际点击某个地方并且 onPlaceSelected 方法被触发。

但在某些情况下,我需要以编程方式在地点搜索栏中设置文本,然后触发 onPlaceSelected 方法。

我使用方法 setText 以编程方式输入文本,但未触发 onPlaceSelected。有没有办法以编程方式触发它?

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

所以在我检查了一段时间如何使用字符串获得 Place 之后, 答案是目前还不能。

Place 是 GooglePlaces 给我们的一个界面。 它有一些方法,如 getId()getName() 等。

当我有一个包含地址的字符串时,例如 "Washington",我试图做的是触发 onPlaceSelected 方法,然后获取 latitudelongitude Place 给了我们。

您可以通过创建一个PlaceSelectionListener来触发onPlaceSelected方法 作为您的 class 会员。

例如:

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

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

拥有此侦听器后,您可以使用它:

listener.onPlaceSelected(yourPlace);

请注意,该方法需要一个 Place 变量作为参数。 正如我之前所说,它暂时不能接受 String。PlacesApi 不接受 给出从字符串中获取位置的任何方法..所以你必须有一个有效的 为您使用此方法放置对象。

至于我的应用程序,我找到了另一个解决方案,我使用了 Android Geocoder 相反,它为我提供了地址的正确纬度和经度。