Как фрагмент автозаполнения может быть виден только при нажатии кнопки? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть активность на карте.Я добавил фрагмент автозаполнения поиска на карте для поиска мест.Я хочу показать фрагмент автозаполнения только при нажатии кнопки поиска.Как это сделать?Я хочу, чтобы данный код был внутри нажатия кнопки.

 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 голосов
/ 26 апреля 2018

Как раз для вашего случая, у Google есть раздел в документации:

Если вы хотите, чтобы ваше приложение использовало другой навигационный поток (например, для запуска процесса автозаполнения с помощью значка, а неполе поиска), ваше приложение может запускать автозаполнение, используя намерение.

В этом случае вам не нужно реализовывать обратные вызовы, пожалуйста, посмотрите на эту страницу и найдитераздел Option 2: Use an intent to launch the autocomplete activity.

По сути, у вас есть 2 шага, как описано в документации:

1) Используйте PlaceAutocomplete.IntentBuilder для создания намерения, передавая требуемый режим 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, просто посмотрите страницу документации, там все очень хорошо объяснено.

...