如何仅在点击按钮上显示自动完成搜索片段?

时间:2018-04-25 20:34:46

标签: android google-maps-android-api-2

我有一个地图活动。我在地图中添加了一个自动填充搜索片段来搜索地点。我想仅在单击我的搜索按钮时显示自动完成片段。怎么做?我希望点击按钮内的给定代码。

 placeAutoComplete = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete);
    placeAutoComplete.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            addMarker(place);
            //Log.d("Maps", "Place selected: " + place.getName());
        }

        @Override
        public void onError(Status status) {
            Log.d("Maps", "An error occurred: " + status);
        }
    });
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}
public void addMarker(Place p){

    MarkerOptions markerOptions = new MarkerOptions();

    markerOptions.position(p.getLatLng());
    markerOptions.title(p.getName()+"");
    markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.hosp));

    mMap.addMarker(markerOptions);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(p.getLatLng()));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(13));

}

1 个答案:

答案 0 :(得分:0)

正是因为您的情况,Google在文档中有一个部分:

  

如果您希望自己的应用使用不同的导航流程(例如,要从图标而不是搜索字段触发自动填充体验),您的应用可以使用意图启动自动填充功能。

在这种情况下,您不必实施回调,请查看this页面并查找Option 2: Use an intent to launch the autocomplete activity部分。

基本上,您有两个步骤,如文档中所述:

  

1)使用PlaceAutocomplete.IntentBuilder创建一个intent,传递所需的PlaceAutocomplete模式。意图必须调用startActivityForResult,传入一个标识您意图的请求代码。

     

2)覆盖onActivityResult回调以接收所选位置。

此代码会进入您的onClickListener

try {
    Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN).build(this);
    startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE);
} catch (GooglePlayServicesRepairableException e) {
    // TODO: Handle the error.
} catch (GooglePlayServicesNotAvailableException e) {
    // TODO: Handle the error.
}

然后你覆盖onActivityResult,只需查看文档页面,就可以很好地解释所有内容。