2016-12-27 10 views
2

Fragmentの中にPlaceAutoCompleteFragmentを使用しています。初めて、Fragment(PlaceAutoCompleteFragmentが配置されているAppフラグメント)が開くと、魅力的にうまく機能します。PlaceAutoCompleteFragmentウィジェットをフラグメントに使用する方法

しかし、もう一度ボタンを押してFragmentを開くと、以下のエラーでクラッシュします。それは一度だけ動作します。

致命的な例外:

android.view.InflateException:バイナリXMLファイルの行番号64:による誤差 膨張クラスフラグメント: java.lang.IllegalArgumentExceptionが:バイナリXMLファイルのライン#64: 重複 とID 0x7f0d0094、タグヌル、または親IDは0xffffffff別のフラグメント ためcom.google.android.gms.location.places.ui.PlaceAutocompleteFragment

これは私がTHIを使用しています方法ですSは、検索場所

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

      View view = inflater.inflate(R.layout.parkingview_fragment, container, false); 

      mapFragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.map_parkingview); 
      mapFragment.getMapAsync(this); 

      // For Search location 
      PlaceAutocompleteFragment autocompleteFragment = null; 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 

        autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_fragment_parkingview); 
      } 

     autocompleteFragment.setOnPlaceSelectedListener(this); 
     autocompleteFragment.setHint("Search a Location"); 
//  autocompleteFragment.setBoundsBias(BOUNDS_MOUNTAIN_VIEW); 

     return view; 

    } 

XMLのために:

<fragment 
     android:id="@+id/place_fragment_parkingview" 
     android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
+1

ヨルダンの答えは正しいです。そのように選択する必要があります。 –

答えて

2

動的にそれは問題を解決するあなたのフラグメントを宣言します。

<FrameLayout android:id="@+id/fragment_content" android:layout_width="match_parent" android:layout_height="wrap_content" />

そして、あなたはまだいくつかの点で前に作成したPlaceAutoCompleteFragmentインスタンスを削除していないため、この問題が発生しonCreateView

SupportPlaceAutocompleteFragment autocompleteFragment = new SupportPlaceAutocompleteFragment(); android.support.v4.app.FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragment_content, autocompleteFragment); ft.commit();

+1

ありがとう、私のために働いた –

+0

そのうまく動作しますが、fragment.getView()はnullを返します。その場合clear_buttonへのアクセス方法 –

0

あなたのフラグメントを更新します。

注意深い人! Jordonによってポストされたメソッドを使用すると、動作しますが、フラグメントのビューは作成されていないため、フラグメントのビュー(入力edittextとclearbuttonなど)はアクセスできません。正しい答えはREMOVEですXMLファイルにパースされたフラグメントのインスタンスは、プログラム上、PlaceAutoCompleteFragmentを含むFragmentのonDestroyViewメソッドを上書きします。

@Override 
public void onDestroyView() {  
if (autocompleteFragment != null) { 
    android.support.v4.app.FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
    fragmentTransaction.remove(autocompleteFragment).commitNowAllowingStateLoss(); 
} 
super.onDestroyView();  
}  

この方法では、あなたがあなたのフラグメントを再作成いつでもそれがPlaceAutoCompleteFragmentのインスタンスがすでに作成されていません。ハッピーコーディング!

関連する問題