将PlaceAutocompleteFragment添加到片段抛出错误

时间:2016-05-03 05:58:32

标签: android android-fragments google-places-api

我已在活动中实施了PlaceAutocompleteFragment,并且正在成功运作。但是如何在android中的片段中实现相同的? 我已经实现了像这样的placeautocomplete片段

 PlaceAutocompleteFragment autocompleteFragment1 = (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);

我得到的错误是

  

Incovertible types;不能将'android.support.v4.app.Fragment'强制转换为com.google.android.gms.location.PlaceAutocompleteFragment'。

XML布局是

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

提前致谢

6 个答案:

答案 0 :(得分:43)

像这样使用getActivity()

PlaceAutocompleteFragment autocompleteFragment1  = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1);

答案 1 :(得分:24)

  1. 在布局xml中更改 SupportPlaceAutocompleteFragment 而不是 PlaceAutocompleteFragment
  2.    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. 更改 getChildFragmentManager()而不是 getFragmentManager()并使用 SupportPlaceAutocompleteFragment 代替 PlaceAutocompleteFragment 你的java文件,。

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

答案 2 :(得分:0)

您必须在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,您的ID不匹配。 (place_autocomplete_fragment1)

答案 3 :(得分:0)

片段ID应为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 :(得分:0)

此错误的另一个正当理由是,您必须将Fragment课程从android.support.v4.app.Fragment扩展为PlaceAutoCompleteFragment,并将其Fragmentcom.google.android.gms.location.PlaceAutocompleteFragment扩展为SupportPlaceAutoCompleteFragment }。 为避免这种情况,您应该/可以使用SupportPlaceAutocompleteFragment autocompleteFragment1 = (SupportPlaceAutocompleteFragment) getActivity.getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1); 代替您使用的LogUtils

getClass().getResource("/logs")

使用此功能,您的自动完成小部件也可以在较低版本的设备上使用。

答案 5 :(得分:0)

这是Kotlin中的解决方案。这是专门用于如果要在片段中启动自动完成片段的话。

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