18

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

3
  • 1
    Post your xml layout. Commented May 3, 2016 at 6:04
  • @Amit Nair see my answer below. Commented May 3, 2016 at 6:20
  • Can you post the full code here or git-hub and post a link. I'm working on the same here and running into numerous errors @Amit Nair Commented Mar 2, 2017 at 8:52

6 Answers 6

46

Use getActivity() like this way.

PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1); 
Sign up to request clarification or add additional context in comments.

2 Comments

@AmitNair glad to help you.
@AhmedWagdi use it inside fragment class. If you are not in Activity or fragment then pass the context to that class and use like this context.getFragmentManager()
24
  1. Change SupportPlaceAutocompleteFragment instead of PlaceAutocompleteFragment in 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" /> 
  1. Change getChildFragmentManager() instead of getFragmentManager() and use SupportPlaceAutocompleteFragment instead of PlaceAutocompleteFragment in your java file,.

     SupportPlaceAutocompleteFragment autocompleteFragment = (SupportPlaceAutocompleteFragment) getChildFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 

1 Comment

This is the method that should be used when dealing with a nested fragment.
1

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" /> 

Comments

0

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)

Comments

0

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"/> 

Comments

0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.