Автозаполнение Google Places — как получить доступ к необработанному пользовательскому вводу

#android #google-places-api #googleplacesautocomplete

#Android #google-places-api #google-places-автозаполнение

Вопрос:

У меня есть действие, которое дает пользователю возможность ввести данные своего адреса (текст адреса, номер здания / этажа / квартиры).

Я хочу получить доступ / сохранить то, что пользователь пишет в AutocompleteSupportFragment, особенно в тех случаях, когда API автозаполнения Places не находит никаких результатов, чтобы я мог использовать то, что пользователь ввел напрямую.

Что я пробовал до сих пор: 1- Метод onError AutocompleteSupportFragment.setOnPlaceSelectedListener в AutocompleteSupportFragment.setOnPlaceSelectedListener не вызывается. 2- Добавление TextWatcher в AutocompleteSupportFragment.a (где a — ссылка на EditText) для получения данных в afterTextChanged данные не сохраняются.

XML-код:

  <fragment
            android:id="@ id/address_autocomplete_fragment"
            android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
  

Java-код:

 Places.initialize(getApplicationContext(), Constants.PLACES_API_KEY);


// Initialize the AutocompleteSupportFragment.
autocompleteFragment = (AutocompleteSupportFragment) getSupportFragmentManager().findFragmentById(R.id.address_autocomplete_fragment);

// Specify the types of place data to return.
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG, Place.Field.ADDRESS));

autocompleteFragment.setCountry("EG");
autocompleteFragment.a.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        Log.d(TAG, "User text: "   s);
    }
});

// Set up a PlaceSelectionListener to handle the response.
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
    @Override
    public void onPlaceSelected(Place place) {
        //Get info about the selected place.
        Log.d(TAG, "Place: "   place.getName()   ", "   place.getId());
    }

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

введите описание изображения здесь

Комментарии:

1. Вы нашли свой ответ? Если да, можете ли вы рассказать мне, что вы сделали?

2. @LizG К сожалению, нет, это все то же самое, что и есть.