Android использует PlaceAutoCompleteActivity (Google Places API)


Я привел очень простой пример проблемы, которую я имею с PlaceAutoCompelteActivity. Моя карта появится на экране, а также 2 строки текстового поиска сверху. Проблема в том, что после того, как я нажму в textview, появится клавиатура и курсор будет мигать в textview (как и ожидалось), однако после того, как я наберу первую букву (если я наберу быстро, я могу получить 2 буквы), клавиатура исчезнет, и поле поиска будет пустым, и курсор исчезнет (возврат в состояние preclicked on.) Вот такой ссылка на документацию: https://developers.google.com/places/android-api/autocomplete?hl=en

Код для простого действия и xml-файл приведены ниже:

Активность Java:

package com.blah.android.backseatbuddy;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
import com.google.android.gms.location.places.ui.PlaceSelectionListener;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class RouteActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    //    private EditText beginningDestination;
//    private EditText endingDestination;
    PlaceAutocompleteFragment beginningDestination;
    PlaceAutocompleteFragment endingDestination;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_route);

        beginningDestination = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.beginning_destination);
        beginningDestination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                // TODO: Get info about the selected place.
                Log.i("beginningDestination ", "Place: " + place.getName());
            }

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

        endingDestination = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.ending_destination);
        endingDestination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                // TODO: Get info about the selected place.
                Log.i("endingDestination ", "Place: " + place.getName());
            }

            @Override
            public void onError(Status status) {
                // TODO: Handle the error.
                Log.i("endingDestination ", "An error occurred: " + status);
            }
        });
//        beginningDestination = (EditText) findViewById(R.id.beginning_destination);
//        endingDestination = (EditText) findViewById(R.id.ending_destination);

        // 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);


    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

И xml-файл макета:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/relativeLayoutFragment"
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <fragment
        android:id="@+id/beginning_destination"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
        />

    <fragment
        android:id="@+id/ending_destination"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
        />

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.greg.android.backseatbuddy.RouteActivity"/>

</LinearLayout>
1 2

1 ответ:

Возможно, Вам потребуется вставить свой собственный ключ API (если вы еще этого не сделали), который можно получить через консоль разработчиков Google. Подробности здесь: https://developers.google.com/places/android-api/signup?hl=en Кроме того, в консоли разработчиков Google добавьте Google Places API в список включенных API в вашем проекте.