问题
I have implemented PlaceAutocompleteFragment in activity and is working successfuly. But how to implement the same in fragment in android? I have implemented placeautocomplete fragment like this
PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);
Error I am getting is
Incovertible types;cannot cast 'android.support.v4.app.Fragment' to 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>
Thanks in advance
回答1:
Use getActivity() like this way.
PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1);
回答2:
- Change SupportPlaceAutocompleteFragment instead of
PlaceAutocompleteFragmentin your layout xml
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"
/>
Change getChildFragmentManager() instead of
getFragmentManager()and use SupportPlaceAutocompleteFragment instead ofPlaceAutocompleteFragmentin your java file,.SupportPlaceAutocompleteFragment autocompleteFragment = (SupportPlaceAutocompleteFragment) getChildFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
回答3:
You have to use the following in your XML layout file:
<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"
/>
Note the full classname and id, your id don't match. (place_autocomplete_fragment1)
回答4:
The fragment id should be 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"/>
回答5:
Another valid reason of this error is that you must be extending your Fragment class from android.support.v4.app.Fragment and casting it to PlaceAutoCompleteFragment which extends Fragment class from com.google.android.gms.location.PlaceAutocompleteFragment.
To avoid this you should/can use SupportPlaceAutoCompleteFragment instead of you are using.
SupportPlaceAutocompleteFragment autocompleteFragment1 = (SupportPlaceAutocompleteFragment)
getActivity.getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);
Using this your autocomplete widget will also work on the lower version devices.
回答6:
Here's the solution in Kotlin. This is specifically for if you want to launch the autocomplete fragment while being in a fragment.
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"
/>
来源:https://stackoverflow.com/questions/36996672/adding-placeautocompletefragment-to-fragment-throws-error