Adding PlaceAutocompleteFragment to fragment throw

2019-03-24 03:19发布

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

5条回答
Root(大扎)
2楼-- · 2019-03-24 03:57

Use getActivity() like this way.

PlaceAutocompleteFragment autocompleteFragment1  = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1);
查看更多
不美不萌又怎样
3楼-- · 2019-03-24 03:58

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"/>
查看更多
爷、活的狠高调
4楼-- · 2019-03-24 04:09

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)

查看更多
5楼-- · 2019-03-24 04:17

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.

查看更多
Animai°情兽
6楼-- · 2019-03-24 04:22
  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);
    
查看更多
登录 后发表回答