【问题标题】:android.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapViewandroid.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapView
【发布时间】:2019-05-26 14:39:42
【问题描述】:

我尝试使用 viewpager 在片段中实现地图视图,但尽管尝试了许多解决方案,但我找不到适合我的项目的正确解决方案。

这是我的日志

2019-05-26 17:28:16.645 12469-12469/com.example.emrullah.booksharingappv4 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.emrullah.booksharingappv4, PID: 12469
    android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapView
    Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapView
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
        at android.view.LayoutInflater.createView(LayoutInflater.java:651)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:867)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at com.example.emrullah.booksharingappv4.Fragments.MapviewFragment.onCreateView(MapviewFragment.java:50)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243)
        at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:654)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:146)

这是我的片段

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.mapview_fragment, container, false);

        mLocationList= new ArrayList<>();
        mLocList= new ArrayList<>();
        mLocList2= new ArrayList<>();
        mRef=FirebaseDatabase.getInstance().getReference().child("users");
        currentUser=FirebaseAuth.getInstance().getCurrentUser();
        getLatLongFromDb();
        split(mLocList);

        mMapView = view.findViewById(R.id.map_view);
        mMapView.onCreate(savedInstanceState);

        mMapView.onResume();

        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }

        //Gets the Googlemap from Mapview and does the initialization stuff
        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mMap = googleMap;
                mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);


                for (int i = 0;i<mLocList2.size();i++){
                    LatLng sydney = new LatLng(mLocList2.get(i),mLocList2.get(i+1));
                    mMap.addMarker(new MarkerOptions().position(sydney).title("Book dest:"+(i+1)));
                }
            }
        });


        return view;
    }
    @Override
    public void onResume() {
        super.onResume();

        if (mMapView != null)
            mMapView.onResume();
    }


    @Override
    public void onDestroy() {
        super.onDestroy();

        if (mMapView != null)
            mMapView.onDestroy();
    }


    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        if (mMapView != null)
            mMapView.onSaveInstanceState(outState);
    }
}

这是我的 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.gms.maps.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.emrullah.booksharingappv4.Fragments.MapviewFragment"
        />
</RelativeLayout>

和viewPager部分在Activity中

public void setupViewPager(ViewPager viewPager) {
        SectionPageAdapter sectionPageAdapter = new SectionPageAdapter(getSupportFragmentManager());
        sectionPageAdapter.addFragment(new BookListFragment(), "BOOKS");
        sectionPageAdapter.addFragment(new MapviewFragment(), "BOOK MAP");
        sectionPageAdapter.addFragment(new SettingsFragment(), "SETTINGS");
        viewPager.setAdapter(sectionPageAdapter);
    }
    public void setUpTabIcons(){
        tabLayout.getTabAt(0).setIcon(navIcons[0]);
        tabLayout.getTabAt(1).setIcon(navIcons[1]);
        tabLayout.getTabAt(2).setIcon(navIcons[2]);
    }

我知道有一些与我类似的问题,但我尝试了所有这些问题,但没有一个有效。感谢您的帮助。

【问题讨论】:

    标签: java android android-fragments android-viewpager android-mapview


    【解决方案1】:

    您正在尝试使用支持 Android 的原始版本的 Google 地图 (com.google.android.maps)。我们现在将其称为 Maps V1。

    这不起作用,因为 Maps V1 已被弃用超过 4 年。您无法再获得它的 API 密钥,因此即使您的代码是正确的,它也不会工作。崩溃是因为旧的 MapView 必须在 MapActivity 中使用,如错误所示。

    当前支持 Android 的 Google 地图版本 - Maps V2 - 具有非常不同的 API,并且不涉及 com.google.android.maps 包中的类。

    请从官方documentation阅读如何使用地图V2

    【讨论】:

    • 感谢您,您对版本的看法是正确的,但是当我更正版本时,viewpager 会出现错误,因为预期的类型是 Fragment,我正在尝试传递 FragmentActivity。我找不到转换它的方法。你也有什么建议吗??
    • 欢迎您,如果正确,请考虑我的回答,对于 viewpager,您必须使用片段
    • 我已经投了票,但因为我没有足够的声望,它才被保存下来。是的,我必须使用片段,但没有任何方法可以将 FragmentActivity 转换为 Fragment 吗?
    • 并将其标记为正确,因为它是您最初问题的正确答案! ,您不能将 fragmentActivity 转换为 fragment ,请阅读:stackoverflow.com/questions/10609268/…
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2016-11-03
    • 2020-06-27
    • 1970-01-01
    • 2015-08-21
    • 2012-02-09
    • 2012-03-04
    • 2013-06-25
    相关资源
    最近更新 更多