2014-12-21 56 views
2

所以我有一個片段類:不可兌換類型錯誤SupportMapFragment

public class MyMapFragmentActivity extends Fragment implements LocationListener, 
     GoogleMap.OnMapClickListener, GoogleMap.OnMapLongClickListener { 

在這我有一個SupportMapFragment定義:

private SupportMapFragment fragment; 

我試圖使用findFragmentById:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    FragmentManager fm = getChildFragmentManager(); 
    fragment = (SupportMapFragment) fm.findFragmentById(R.id.map); 
    if (fragment == null) { 
     fragment = SupportMapFragment.newInstance(); 
     fm.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
    } 
} 

該行

fragment = (SupportMapFragment) fm.findFragmentById(R.id.map); 

儘管是一個SupportMapFragment,這是給不可逆性錯誤類型的「碎片」: 不能施放android.app.fragment到com.google.android.gms.maps.SupportMapFragment!

我使用的片段佈局:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:name="com.google.android.gms.maps.SupportMapFragment" /> 

回答

1

你支持混合片段和不支持片段經理。改爲使用SupportFragmentManager。

+0

我沒有在任何開發人員文檔中看到「SupportFragmentManager」,並且它沒有出現在代碼提示中? – makapaka

+0

它在android支持庫中。它將代碼片段(以及其他一些事物)反向移植到2.x.或者,您可以使用MapFragment而不是SupportMapFragment,但這會在2.x上打破您的應用程序。基本上,要使用2.x,只使用支持類。要僅使用4.0+,您可以使用普通的。但不要混淆兩者。 –

+0

你能在Google網站上找到支持參考嗎?我看不到它;這個答案有70分,是我試圖做到這一點:http://stackoverflow.com/questions/14565460/error-opening-supportmapfragment-for-second-time – makapaka

3

如果使用兼容性庫 - 使用getSupportFragmentManager().findFragmentById(R.id.fragment);,否則從android.app.Fragment而不是android.support.v4.app.fragment擴展。