首页 > 解决方案 > 使用 SupportMapFragment 时应用更改按钮不起作用

问题描述

如果我有SupportMapFragment然后应用更改按钮(黄色)不能成功(应用程序会因Error inflating class fragment错误而崩溃)

我必须总是按绿色按钮才能看到任何变化

在此处输入图像描述

在 12 线我有

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

错误:

Process: com.example.test, PID: 4940
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2485)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4189)
        at android.app.ActivityThread.access$1200(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1404)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5602)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
     Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
        at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393)
        at android.app.Activity.setContentView(Activity.java:2233)
        at com.example.test.MainActivity.onCreate(MainActivity.java:67)
        at android.app.Activity.performCreate(Activity.java:6358)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4189) 
        at android.app.ActivityThread.access$1200(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1404) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:157) 
        at android.app.ActivityThread.main(ActivityThread.java:5602) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 

'com.google.android.gms:play-services-maps:16.0.0'使用ps

标签: android

解决方案


你称之为黄色按钮的那个是即时运行的,因为 MapFragment 不会被添加到 BackStack 导致崩溃,所以当即时运行应用程序时,它不会找到它的实例。您可以通过以下方式修复它:

   if (savedInstanceState != null) {
            mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentByTag("map");
        } else {
            mapFragment = SupportMapFragment.newInstance();
            FragmentTransaction mapTransaction = getSupportFragmentManager().beginTransaction();
            mapTransaction.addToBackStack("map").add(R.id.map, mapFragment, "map").commit();
        }
        mapFragment.getMapAsync(this);

推荐阅读