web-dev-qa-db-ja.com

PlaceAutocompleteFragmentをフラグメントに追加するとエラーがスローされる

PlaceAutocompleteFragmentをアクティビティに実装し、正常に動作しています。しかし、アンドロイドで同じようにフラグメントで実装する方法は?私はこのようにplaceautocompleteフラグメントを実装しました

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

私が得ているエラーは

検出できないタイプ。「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>

前もって感謝します

18
Amit Nair

このようにgetActivity()を使用します。

PlaceAutocompleteFragment autocompleteFragment1  = (PlaceAutocompleteFragment)getActivity().getFragmentManager().findFragmentById(R.id.autocomplete_fragment1);
45
user5248371
  1. 変更SupportPlaceAutocompleteFragmentの代わりに PlaceAutocompleteFragment レイアウト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. 変更getChildFragmentManager()の代わりに getFragmentManager() 代わりにSupportPlaceAutocompleteFragmentを使用します PlaceAutocompleteFragment あなたのJavaファイル、.

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

これが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"
/>
0
CacheMeOutside

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)

0
sonique

フラグメント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"/>
0
Naveen Shriyan

このエラーのもう1つの有効な理由は、Android.support.v4.app.FragmentからFragmentクラスを拡張し、com.google.Android.gms.location.PlaceAutocompleteFragmentからPlaceAutoCompleteFragmentクラスを拡張するFragmentにキャストする必要があることです。これを回避するには、使用する代わりにSupportPlaceAutoCompleteFragmentを使用する必要があります。

SupportPlaceAutocompleteFragment autocompleteFragment1 = (SupportPlaceAutocompleteFragment)
            getActivity.getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);

これを使用すると、オートコンプリートウィジェットは下位バージョンのデバイスでも機能します。

0
Poras Bhardwaj