2014-02-09 22 views
0

以下this示例在這裏,我試圖將映射插入到片段中。這裏是我的片段類:將映射添加到片段會產生異常

package com.example.mapfragdemo; 

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

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapPageFragment extends Fragment { 

private SupportMapFragment fragment; 
private GoogleMap map; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.map_fragment_layout, container, false); 
} 

@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.map, fragment).commit(); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (map == null) { 
     map = fragment.getMap(); 
     map.addMarker(new MarkerOptions().position(new LatLng(0, 0))); 
    } 
} 
} 

這是我的主要活動:

package com.example.mapfragdemo; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 

activity_main.xml中

<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" 
tools:context=".MainActivity" > 

<fragment 
    android:id="@+id/fragment1" 
    android:name="com.example.mapfragdemo.MapPageFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 


</RelativeLayout> 

map_fragment_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<fragment 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
android:id="@+id/map" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
class="com.google.android.gms.maps.SupportMapFragment" 
map:uiCompass="true" 
map:mapType= "normal" 
map:uiRotateGestures="true" 
map:uiScrollGestures="true" 
map:uiTiltGestures="true" 
map:uiZoomControls="true" 
map:uiZoomGestures="true" /> 

我得到以下例外:

02-10 02:23:40.731: E/Trace(23341): error opening trace file: No such file or directory (2) 
02-10 02:23:40.731: D/ActivityThread(23341): setTargetHeapUtilization:0.25 
02-10 02:23:40.731: D/ActivityThread(23341): setTargetHeapIdealFree:8388608 
02-10 02:23:40.731: D/ActivityThread(23341): setTargetHeapConcurrentStart:2097152 
02-10 02:23:40.841: D/AndroidRuntime(23341): Shutting down VM 
02-10 02:23:40.841: W/dalvikvm(23341): threadid=1: thread exiting with uncaught exception (group=0x40d65378) 
02-10 02:23:40.851: E/AndroidRuntime(23341): FATAL EXCEPTION: main 
02-10 02:23:40.851: E/AndroidRuntime(23341): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mapfragdemo/com.example.mapfragdemo.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2071) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.ActivityThread.access$600(ActivityThread.java:138) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.os.Looper.loop(Looper.java:213) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.ActivityThread.main(ActivityThread.java:4787) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at java.lang.reflect.Method.invokeNative(Native Method) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at java.lang.reflect.Method.invoke(Method.java:511) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at dalvik.system.NativeStart.main(Native Method) 
02-10 02:23:40.851: E/AndroidRuntime(23341): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:262) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.Activity.setContentView(Activity.java:1867) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at com.example.mapfragdemo.MainActivity.onCreate(MainActivity.java:12) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.Activity.performCreate(Activity.java:5008) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035) 
02-10 02:23:40.851: E/AndroidRuntime(23341): ... 11 more 
02-10 02:23:40.851: E/AndroidRuntime(23341): Caused by: java.lang.ClassCastException: com.example.mapfragdemo.MapPageFragment cannot be cast to android.app.Fragment 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.Fragment.instantiate(Fragment.java:577) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.Fragment.instantiate(Fragment.java:552) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.app.Activity.onCreateView(Activity.java:4656) 
02-10 02:23:40.851: E/AndroidRuntime(23341): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
02-10 02:23:40.851: E/AndroidRuntime(23341): ... 21 more 

爲什麼會發生上述異常。任何幫助表示讚賞。

回答

1

爲什麼上面的異常occcurs

的錯誤信息是:

Caused by: java.lang.ClassCastException: com.example.mapfragdemo.MapPageFragment cannot be cast to android.app.Fragment 

MapPageFragment延伸android.support.v4.app.Fragment,不android.app.Fragment

總體而言,兩個地方正在使用的片段反向移植(MapPageFragment,再加上佈局的參考SupportMapFragment),而在另一個地方(你Activity)不使用的反向移植。我的猜測是你應該有MainActivity擴展FragmentActivity而不是Activity