2016-12-29 67 views
2

有没有什么方法可以使用Google Places API中的placeautocompletefragment来获取搜索视图中显示的完整地址?它只显示整个地址的第一部分。我确信一切都正确实现,并且完整地址由place.getAddress()返回。任何想法为什么完整的地址不显示在搜索栏上?placeautocompletefragment完整地址

autocompleteFragment = (PlaceAutocompleteFragment) 
      getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 
    ((EditText)autocompleteFragment.getActivity().findViewById(R.id.place_autocomplete_search_input)).setTextSize(18.0f); 
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override 
     public void onPlaceSelected(Place place) { 
      // TODO: Get info about the selected place. 
      ((EditText)autocompleteFragment.getView().findViewById(R.id.place_autocomplete_prediction_primary_text)) 
      //autocompleteFragment.getActivity().findViewById(R.id.place_autocomplete_search_input)) 
        .setText(place.getAddress()); 
      Log.i(TAG, "Place Selected: " + place.getName() + place.getAddress()); 
     } 

     @Override 
     public void onError(Status status) { 
      // TODO: Handle the error. 
      Log.i(TAG, "An error occurred: " + status); 
     } 
    }); 
    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
      .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS) 
      .build(); 
    autocompleteFragment.setFilter(typeFilter); 

编辑: 我的应用程序功能完全一样,在这个环节上。 https://maps-apis.googleblog.com/2015/12/autocomplete-widget-and-updated-place.html

我想要的是在搜索栏上显示灰色文本(完整地址)而不是黑色文本(地点名称)。有谁知道解决方案?先谢谢你!

+1

在这里发布您的代码 –

回答

3

下面

public class CustomPlaceAutoCompleteFragment extends PlaceAutocompleteFragment { 
    Place place; 

    @Override 
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) { 
    this.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override public void onPlaceSelected(Place place) { 
     CustomPlaceAutoCompleteFragment.this.place = place; 
     } 

     @Override public void onError(Status status) { 

     } 
    }); 
    return super.onCreateView(layoutInflater, viewGroup, bundle); 
    } 

    @Override public void onActivityResult(int i, int i1, Intent intent) { 
    super.onActivityResult(i, i1, intent); 
    ((AppCompatEditText) getView() 
     .findViewById(R.id.place_autocomplete_search_input)).setText(place.getAddress()); 
    } 
} 

在你的XML代码创建CustomPlaceAutoCompleteFragment

<fragment 
     android:id="@+id/place_autocomplete_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:name="com.yourpackagenaem.CustomPlaceAutoCompleteFragment" 
     /> 

您无法在onPlaceSelected中设置完整地址的原因是PlaceAutoCompleteFragment将onActivityResult中的文本名称设置为默认值。所以,我们需要重写它。这就是为什么我建议你创建一个CustomPlaceAutoCompleteFragment。我测试了代码。它像一个魅力。

希望它有帮助。快乐编码:)

+0

谢谢。像魔术一样工作 –

0

使用AutocompleteFilter得到这样的结果完全地址:

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
       .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS) 
       .build(); 

Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY).setFilter(typeFilter).build(activity); 
     startActivityForResult(intent, 1); 

源:https://developers.google.com/android/reference/com/google/android/gms/location/places/AutocompleteFilter

+0

我想我做了什么,对吧? –

0

您不需要为它创建自定义类,只需将它放在Main类上即可。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     try{ 
      ((EditText)autocompleteFragment.getView().findViewById(R.id.place_autocomplete_search_input)).setText(mPlace.getAddress()); 

     }catch (Exception e){ 
       e.printStackTrace(); 
     } 

    } 
0

只需在PlaceAutocompleteFragment本身上调用setText()即可。

PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
    @Override 
    public void onPlaceSelected(Place place) { 
     // TODO: Get info about the selected place. 
     autocompleteFragment.setText(place.getAddress()); 
    } 

    @Override 
    public void onError(Status status) { 
     // TODO: Handle the error. 
     Log.i(TAG, "An error occurred: " + status); 
    } 
} 
+0

这似乎不起作用。在调用onPlaceSelected之后,PlaceSelectionListener必须设置autocompleteFragment的文本 – thailey01