2015-02-24 79 views
0

我已經創建了一個應用程序,查看谷歌v2地圖成功地成片段;我看到地圖。谷歌地圖V2到片段導致鑄造錯誤

如果我嘗試添加以下代碼:

MapView mapView = (MapView) inflatedView .findViewById(R.id.map); 

我得到這個錯誤

android.support.v4.app.NoSaveStateFrameLayout cannot be cast to com.google.android.gms.maps.MapView 

我的文件Fragment5.java是:

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Fragment5 extends Fragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
     { 
     View inflatedView = inflater.inflate(R.layout.fragment_5, container,false); 

     // This next line is the problem 
     MapView mapView = (MapView) inflatedView .findViewById(R.id.map); 

     return inflatedView; 
     } 
    } 

我的佈局文件是

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.xxxxxxx.yyyyyyyy.MainActivity$PlaceholderFragment" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/section_label" 
      android:text="text title" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 


     <fragment 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      class="com.google.android.gms.maps.SupportMapFragment" /> 



    </LinearLayout> 
</RelativeLayout> 

詳細的錯誤:

02-24 21:54:37.657: E/AndroidRuntime(19225): FATAL EXCEPTION: main 
02-24 21:54:37.657: E/AndroidRuntime(19225): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxxxxx.yyyyyyyy/com.xxxxxxx.yyyyyyyy.MainActivity}: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to com.google.android.gms.maps.MapView 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.ActivityThread.access$700(ActivityThread.java:140) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.os.Looper.loop(Looper.java:137) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.ActivityThread.main(ActivityThread.java:4921) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at java.lang.reflect.Method.invokeNative(Native Method) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at java.lang.reflect.Method.invoke(Method.java:511) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at dalvik.system.NativeStart.main(Native Method) 
02-24 21:54:37.657: E/AndroidRuntime(19225): Caused by: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to com.google.android.gms.maps.MapView 
02-24 21:54:37.657: E/AndroidRuntime(19225): at com.xxxxxxx.yyyyyyyy.Fragment5.onCreateView(Fragment5.java:32) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.Activity.performStart(Activity.java:5216) 
02-24 21:54:37.657: E/AndroidRuntime(19225): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2083) 
02-24 21:54:37.657: E/AndroidRuntime(19225): ... 11 more 

有人能告訴他在哪裏的問題呢? 非常非常非常感謝:-)

回答

1

你不應該寫:

inflatedView.findViewById(); 

相反,你應該爲了寫getView().findViewById();

另外,我建議使用此代碼設置的MapView:

public class Fragment5 extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 

     View inflatedView = inflater.inflate(R.layout.fragment_5, container,false); 

     return inflatedView; 
     } 

    private void setUpMapIfNeeded() { 

      MapsInitializer.initialize(getActivity()); 

      if (googleMap == null) { 
       googleMap = ((MapView) getView().findViewById(R.id.store_map_frag)).getMap(); 
       if (googleMap != null) { 
        setUpMap(); 
       } 
      } 
     } 

     private void setUpMap() { 
      googleMap.getUiSettings().setMyLocationButtonEnabled(false); 
      googleMap.getUiSettings().setZoomControlsEnabled(true); 
      googleMap.setMyLocationEnabled(true); 

     } 

     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 

      // Here is where you get the view and display it in the fragment 
      mapView = (MapView) getView().findViewById(R.id.store_map_frag); 
      mapView.onCreate(savedInstanceState); 

      setUpMapIfNeeded(); 

     } 
    } 

如果你還沒有使用NavigationDrawer來設置片段本身,那麼你應該調用FragmentManager和後續代碼(FragmentTransaction,編輯器等)添加到片段中,如android_Muncher在他的回答中聲明。

+0

是的,我用'MainActivity.java'一個NavigationDrawer用'公共類MainActivity擴展ActionBarActivity實現NavigationDrawerFragment.NavigationDrawerCallbacks'。 – Cuarcuiu 2015-02-24 22:21:01

+0

我使用你的代碼,但代碼有這個錯誤'致命的例外:main' - 'java.lang.RuntimeException:無法啓動活動ComponentInfo {com.xxxxxx.yyyyy/com.xxxxxx.yyyyy.MainActivity}:java.lang.ClassCastException :android.support.v4.app.NoSaveStateFrameLayout無法轉換爲com.google.android.gms.maps.MapView' – Cuarcuiu 2015-02-24 22:21:59

+0

@Cuarcuiu嘗試'NavigationDrawerFragment.NavigationDrawerCallbacks extends FragmentActivity' – freddiev4 2015-02-24 22:32:40

1

嘗試在你的oncreate中使用supportmapfragment來膨脹地圖。當然,你的活動將不得不延長FragmentActivity

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_support_map_fragment); 

     FragmentManager fmanager = getSupportFragmentManager(); 
       Fragment fragment = fmanager.findFragmentById(R.id.map); 
       SupportMapFragment supportmapfragment = (SupportMapFragment)fragment; 
       GoogleMap supportMap = supportmapfragment.getMap(); 
    } 
+0

感謝幫助;-) 對不起,但他們只是無知 我必須把這個代碼放入文件 'MainActivity.java'? 'public class MainActivity extends ActionBarActivity implements \t \t NavigationDrawerFragment.NavigationDrawerCallbacks' 'supportMap'如何使用它? – Cuarcuiu 2015-02-24 22:04:09

+0

public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks extends FragmentActivity – 2015-02-24 22:10:13

+0

doubble extends? '公共類MainActivity擴展ActionBarActivity實現NavigationDrawerFragment.NavigationDrawerCallbacks擴展FragmentActivity'?不可能,是語法錯誤...例如@ Freddie_V4建議 – Cuarcuiu 2015-02-24 22:42:27