Adding PlaceAutocompleteFragment to fragment throws error

自古美人都是妖i 提交于 2019-11-29 17:11:53

问题


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:


  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);
    



回答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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!