Android PlacesAutoCompleteFragment触发onPlaceSelected

时间:2017-07-27 13:46:53

标签: android google-places-api google-places

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

1 个答案:

答案 0 :(得分:0)

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

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

当我有一个包含地址的字符串时,我试图做什么,例如“华盛顿”是触发onPlaceSelected方法然后采取 <{1}}提供latitudelongitude

您可以通过创建PlaceSelectionListener来触发onPlaceSelected方法 作为你的班级成员。

例如:

Place

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

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

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

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

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