我有一个应该有谷歌地图的布局。但是,当我尝试包含地图时,应用程序崩溃了。没有地图,它工作正常。
这是我的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/filmhall_contactus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cinema_filmhall_contactus"
android:textColor="#000000"
android:textStyle="bold" />
<TextView
android:id="@+id/filmhall_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cinema_filmhall_address"
android:textColor="#000000"
android:textStyle="bold" />
<TextView
android:id="@+id/filmhall_telephone1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cinema_filmhall_tp1"
android:textColor="#000000"
android:textStyle="bold" />
<TextView
android:id="@+id/filmhall_telephone2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cinema_filmhall_tp2"
android:textColor="#000000"
android:textStyle="bold" />
<TextView
android:id="@+id/filmhall_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cinema_filmhall_email"
android:textColor="#000000"
android:textStyle="bold" />
<TextView
android:id="@+id/filmhall_facilities"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cinema_filmhall_facility"
android:textColor="#000000"
android:textStyle="bold" />
</LinearLayout>
当我删除地图的xml代码时,它正在工作。另外不是
我的logcat
08-06 10:43:12.655: E/AndroidRuntime(28210): FATAL EXCEPTION: main
08-06 10:43:12.655: E/AndroidRuntime(28210): android.view.InflateException: Binary XML file line #8: Error inflating class fragment
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
08-06 10:43:12.655: E/AndroidRuntime(28210): at com.fortuna.cinemalk.TheaterDetailFragment.onCreateView(TheaterDetailFragment.java:24)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.os.Handler.handleCallback(Handler.java:725)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.os.Looper.loop(Looper.java:137)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.app.ActivityThread.main(ActivityThread.java:5279)
08-06 10:43:12.655: E/AndroidRuntime(28210): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 10:43:12.655: E/AndroidRuntime(28210): at java.lang.reflect.Method.invoke(Method.java:511)
08-06 10:43:12.655: E/AndroidRuntime(28210): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
08-06 10:43:12.655: E/AndroidRuntime(28210): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
08-06 10:43:12.655: E/AndroidRuntime(28210): at dalvik.system.NativeStart.main(Native Method)
08-06 10:43:12.655: E/AndroidRuntime(28210): Caused by: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.Fragment.instantiate(Fragment.java:394)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
08-06 10:43:12.655: E/AndroidRuntime(28210): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682)
08-06 10:43:12.655: E/AndroidRuntime(28210): ... 19 more
08-06 10:43:12.986: E/android.os.Debug(2381): !@Dumpstate > sdumpstate -k -t -z -d -o /data/log/dumpstate_app_error
08-06 10:43:21.535: E/ViewRootImpl(2381): sendUserActionEvent() mView == null
08-06 10:43:21.575: E/InputDispatcher(2381): channel ~ Channel is unrecoverably broken and will be disposed!
08-06 10:43:22.196: E/EnterpriseContainerManager(2381): ContainerPolicy Service is not yet ready!!!
08-06 10:43:32.935: E/Watchdog(2381): !@Sync 1245
地图类
package com.fortuna.cinemalk;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class Map extends Activity {
// Google Map
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
try {
// Loading map
initilizeMap();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* function to load map. If map is not created it will create it for you
* */
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
@Override
protected void onResume() {
super.onResume();
initilizeMap();
}
}
答案 0 :(得分:2)
<强>问题:强>
com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment
当您尝试使用{MapFragment
时,您无法将Fragment
投射到原始机器人的ClassCastException
,这将导致MapFragment
转而使用android:id="@+id/map"
投射GoogleMap map = ((MapFragment) getFragmentManager()
.findFragmentById(R.id.map)).getMap();
1}}
MapFragment
编辑:
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
GoogleMap map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
是旧版本的地图我建议将SupportMapFragment用于更新版本。
{{1}}
答案 1 :(得分:0)
尝试将以下权限添加到Manifest.xml文件中。
<permission
android:name="com.fortuna.cinemalk.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
之前
<uses-sdk
android:minSdkVersion=".."
android:targetSdkVersion=".." />
希望这可以帮到你!