使用 CameraUpdate 时如何修复此错误

How can I fix this error when using CameraUpdate

我在使用时遇到这个错误:

CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 16);

我在其他帖子上看到我需要使用 addOnGlobalLayoutListener 但我试过了,似乎无法让它工作

 03-11 12:00:18.496  11035-11035/project.sharethefare E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: project.sharethefare, PID: 11035
    java.lang.RuntimeException: Unable to start activity ComponentInfo{project.sharethefare/project.sharethefare.Share}: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to android.widget.LinearLayout
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2725)
            at android.app.ActivityThread.access0(ActivityThread.java:172)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5834)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
     Caused by: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to android.widget.LinearLayout
            at project.sharethefare.Share.setUpMap(Share.java:105)
            at project.sharethefare.Share.setUpMapIfNeeded(Share.java:82)
            at project.sharethefare.Share.onCreate(Share.java:53)
            at android.app.Activity.performCreate(Activity.java:6221)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2725)
            at android.app.ActivityThread.access0(ActivityThread.java:172)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5834)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
03-11 12:00:21.816  13207-13207/project.sharethefare E/Zygote﹕ MountEmulatedStorage()
03-11 12:00:21.816  13207-13207/project.sharethefare E/Zygote﹕ v2

我遇到错误的代码部分是:

 private void setUpMap() {
        final List <Marker> markers= new ArrayList<>();
        if(alreadyInit==false){
            marker = mMap.addMarker(new MarkerOptions().position(new LatLng(home.curLat,home.curLong)).title("Marker"));
            markers.add(marker);
            alreadyInit=true;
        }

            matchLocLat = client.getlat();
            matchLocLong = client.getlong();
        if(alreadyInit==true){
            marker = mMap.addMarker(new MarkerOptions().position(new LatLng(matchLocLat, matchLocLong)).title("Marker"));
            markers.add(marker);

            LinearLayout mapLayout = (LinearLayout)findViewById(R.id.shared_map);
            mapLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    LatLngBounds.Builder builder = new LatLngBounds.Builder();
                    for (Marker marker : markers) {
                        builder.include(marker.getPosition());
                    }
                    LatLngBounds bounds = builder.build();

                    int padding = 0 ; // offset from edges of the map in pixels
                    CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 16);
                    mMap.animateCamera(cu);
                }
            });


        } 

我会很感激任何帮助和我回答的任何问题

R.id.shared_map 不是 LinearLayout,因此您不能将其转换为 LinearLayout。与CameraUpdateFactory.newLatLngBounds(bounds, 16).

无关

由于 getViewTreeObserver() 是在 View 上实现的,一个解决方案是去掉强制转换,假设 R.id.shared_map 真的代表你想要得到的任何东西 ViewTreeObserver 为.