Ответ 1
Используйте getActivity()
таким образом.
PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1);
Я реализовал PlaceAutocompleteFragment в действии и успешно работает. Но как реализовать то же самое в фрагменте в android? Я реализовал placeautocomplete фрагмент, подобный этому
PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);
Ошибка, которую я получаю,
Неиспользуемые типы, не могут использовать 'android.support.v4.app.Fragment' для com.google.android.gms.location.PlaceAutocompleteFragment.
XML LAYOUT IS
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
card_view:cardCornerRadius="4dp"
card_view:contentPadding="0dp">
<fragment
android:id="@+id/place_autocomplete_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Place"
android:background="#fff"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
/>
</android.support.v7.widget.CardView>
Заранее спасибо
Используйте getActivity()
таким образом.
PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1);
fragment
android:id="@+id/place_autocomplete_fragment"
android:name="com.google.android.gms.location.places.ui.SupportPlaceAutocompleteFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
Измените getChildFragmentManager() вместо getFragmentManager() и используйте SupportPlaceAutocompleteFragment вместо PlaceAutocompleteFragment в ваш java файл,
SupportPlaceAutocompleteFragment autocompleteFragment = (SupportPlaceAutocompleteFragment) getChildFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
В вашем файле макета XML вы должны использовать следующее:
<fragment
android:id="@+id/place_autocomplete_fragment1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
/>
Обратите внимание на полное имя класса и id, ваш идентификатор не совпадает. (Place_autocomplete_fragment1)
Идентификатор фрагмента должен быть android:id="@+id/place_autocomplete_fragment1"
<fragment
android:id="@+id/place_autocomplete_fragment1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"/>
Другая важная причина этой ошибки заключается в том, что вы должны расширять класс Fragment
от android.support.v4.app.Fragment
и отбрасывать его на PlaceAutoCompleteFragment
, который расширяет класс Fragment
от com.google.android.gms.location.PlaceAutocompleteFragment
.
Чтобы этого избежать, вы должны/можете использовать SupportPlaceAutoCompleteFragment
вместо того, чтобы использовать.
SupportPlaceAutocompleteFragment autocompleteFragment1 = (SupportPlaceAutocompleteFragment)
getActivity.getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);
Использование этого виджета автозаполнения также будет работать на устройствах с более низкой версией.
Здесь решение в Котлине. Это специально для того, если вы хотите запустить фрагмент автозаполнения, находясь во фрагменте.
val autocompleteFragment = childFragmentManager.findFragmentById(R.id.autocomplete_support_fragment) as AutocompleteSupportFragment?
<fragment
android:id="@+id/autocomplete_support_fragment"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>