簡體   English   中英

Google Maps V2異常:在Fragment中誇大類片段的錯誤

[英]Google Maps V2 Exception: Error inflating class fragment in Fragment

問候大家Stackoverflow社區,

我正在開發在Fragment和ViewPager中顯示Google Maps V2的Android應用程序。 我面臨着一個問題,那就是要誇大包含Google Maps V2的片段布局。 我在此鏈接中搜索並查看了Android,google maps片段和viewpager-錯誤地為答案添加了類片段 ,因為該方法與我一直在尋找的方法相同,但在Fragment中將Google Maps V2填充了,但仍然無法正常工作。 也在Fragment中也搜索了Android Google Maps鏈接但是結果是一樣的。

這是我的fragment_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" 
    >
    <LinearLayout 
        android:id="@+id/layout_detail_fragment_secondlist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#ffffff" 
        >
        <ImageView
            android:id="@+id/detail_item_imv_secondlist"
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:contentDescription="@null"
            android:scaleType="fitCenter"
            android:adjustViewBounds="true" 
            />
        <TextView
            android:id="@+id/detail_item_tv_title_secondlist"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:background="#cae0e0e0"
            android:gravity="left|center_vertical"
            android:textSize="15sp"
            android:textStyle="bold" 
            />
        <TextView
            android:id="@+id/detail_item_tv_content_secondlist"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="fill"
            android:padding="10dp"
            android:textSize="12sp"
            android:lineSpacingMultiplier="1.5" 
            />
        <fragment
            android:id="@+id/detail_item_map_content_secondlist"
            android:layout_width="match_parent"
            android:layout_height="150dp" 
            class="com.google.android.gms.maps.SupportMapFragment"
            />
    </LinearLayout>
</ScrollView>

這是我的fragment_class:

package com.gbu.app.template.fragments;

import java.util.ArrayList;

import com.gbu.app.template.DetailSecondListActivity;
import com.gbu.app.template.R;
import com.gbu.app.template.data.StoreObject;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DetailSecondListViewPagerFragment extends Fragment {
    private ImageView detail_item_imv_secondlist;
    private LinearLayout layout_detail_fragment_secondlist;
    private TextView detail_item_tv_title_secondlist, detail_item_tv_content_secondlist;
    private DisplayMetrics detail_metrics_secondlist;
    private ArrayList<StoreObject> detail_store;

    @Override
    public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflator, container, savedInstanceState);
        View view_detail_secondlist = inflator.inflate(R.layout.item_viewpager_detail_secondlist, container, false);
        savedInstanceState = getArguments();
        detail_metrics_secondlist = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(detail_metrics_secondlist);
        layout_detail_fragment_secondlist = (LinearLayout) view_detail_secondlist.findViewById(R.id.layout_detail_fragment_secondlist);
        detail_item_imv_secondlist = (ImageView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_imv_secondlist);
        detail_item_tv_title_secondlist = (TextView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_tv_title_secondlist);
        detail_item_tv_content_secondlist = (TextView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_tv_content_secondlist);
        detail_store = new ArrayList<StoreObject>();
        detail_store = DetailSecondListActivity.detail_store;
        startApp(savedInstanceState);
        return view_detail_secondlist;
    }

    private void startApp(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        detail_item_imv_secondlist.getLayoutParams().height = (int) (detail_metrics_secondlist.heightPixels * 0.38);
        detail_item_imv_secondlist.setImageResource(R.drawable.default_images);
        detail_item_tv_title_secondlist.setText(detail_store.get(savedInstanceState.getInt("current_item")).getTitle());
        detail_item_tv_content_secondlist.setText(detail_store.get(savedInstanceState.getInt("current_item")).getAddress());
    }

    public void onDestroyView() {
        super.onDestroyView();
        Log.d("message", "onDestroyView");
    }
}

這是pager_adapter:

package com.gbu.app.template.adapters;

import com.gbu.app.template.DetailSecondListActivity;
import com.gbu.app.template.fragments.DetailSecondListViewPagerFragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class DetailSecondListPagerAdapter extends FragmentPagerAdapter {
    DetailSecondListViewPagerFragment dslvpf;
    Bundle args;

    public DetailSecondListPagerAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        dslvpf = new DetailSecondListViewPagerFragment();
        args = new Bundle();
        args.putInt("current_item", arg0);
        dslvpf.setArguments(args);
        return dslvpf;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return DetailSecondListActivity.detail_store.size();
    }

}

這是布局Main_Activity.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"
    >
    <android.support.v4.view.ViewPager
        android:id="@+id/detail_view_pager_second_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        />
</RelativeLayout>

這是我的Main_Activity的代碼:

package com.gbu.app.template;

import java.util.ArrayList;

import com.gbu.app.template.adapters.DetailSecondListPagerAdapter;
import com.gbu.app.template.data.StoreObject;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class DetailSecondListActivity extends FragmentActivity {
    private Intent i;
    public static ArrayList<StoreObject> detail_store;
    private ViewPager detail_viewpager_secondlist;
    private DetailSecondListPagerAdapter detail_secondlist_pager_adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail_secondlist);
        detail_viewpager_secondlist = (ViewPager) findViewById(R.id.detail_view_pager_second_list);
        detail_store = new ArrayList<StoreObject>();
        detail_store = SecondListActivity.item_store;
    }

    @Override
    protected void onStart() {
        super.onStart();
        detail_secondlist_pager_adapter = new DetailSecondListPagerAdapter(getSupportFragmentManager());
        detail_viewpager_secondlist.setAdapter(detail_secondlist_pager_adapter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        TabGroupActivity parentActivity = (TabGroupActivity) getParent();
        parentActivity.onActivityResult(3, RESULT_OK, i);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 4 && resultCode == RESULT_OK) {
            i = data;
            startApp(data);
        }
    }

    private void startApp(Intent data) {
        // TODO Auto-generated method stub
        detail_viewpager_secondlist.setCurrentItem(data.getIntExtra("position", 0));
    }
}

這是AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gbu.app.template"
    android:versionCode="1"
    android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools">

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18"/>

    <permission
        android:name="com.gbu.app.template.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="com.gbu.app.template.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gbu.app.template.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.gbu.app.template.TemplateTabActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.gbu.app.template.FirstListActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.gbu.app.template.DetailFirstListActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.gbu.app.template.SecondTabActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.gbu.app.template.SecondListActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.gbu.app.template.DetailSecondListActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.gbu.app.template.MapviewActivity"
            android:label="@string/app_name" >
        </activity>
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyCYbyZhouA71LgSsWbZxnFEyQrt_Q_xdHQ"/>   
    </application>

</manifest>

我的問題是,如果我將Google Maps V2放置在Main_Activity中,則這些地圖可以正常顯示正常。 但是,如果我將其放在Fragments中,則結果將觸發異常:錯誤誇大類片段。 這是顯示異常的logcat,我不知道是什么原因引起的,因為它沒有顯示諸如ClassNotFoundException或NullException之類的原因或引起該異常的原因:

01-11 12:05:44.879: E/AndroidRuntime(7711): android.view.InflateException: Binary XML file line #40: Error inflating class fragment
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at com.gbu.app.template.fragments.DetailSecondListViewPagerFragment.onCreateView(DetailSecondListViewPagerFragment.java:32)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2549)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2549)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711):     at android.widget.FrameLayout.onM

這只是從我fragment_class中的代碼說的,該錯誤僅指向擴大布局:

View view_detail_secondlist = inflator.inflate(R.layout.item_viewpager_detail_secondlist, container, false);

那么,我在這里想念的是什么? 我還沒有添加一些代碼? 或者,也許我不是真的了解開發片段的概念Google Maps V2? 任何幫助將不勝感激,謝謝。

充氣時嘗試使用try catch block
聲明View view_detail_secondlist; 在全球范圍內

       @Override
    public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflator, container, savedInstanceState);

    if (container == null) {
        return null;
    }

    if (view_detail_secondlist != null) {
        ViewGroup parent = (ViewGroup) view_detail_secondlist.getParent();
        if (parent != null)
            parent.removeView(view_detail_secondlist);
    }

    try {
        view_detail_secondlist = inflator.inflate(R.layout.item_viewpager_detail_secondlist, container, false);
    } catch (InflateException e) {
        // Log.wtf("S*****", e.getMessage());
    }
    savedInstanceState = getArguments();
    detail_metrics_secondlist = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(detail_metrics_secondlist);
    layout_detail_fragment_secondlist = (LinearLayout) view_detail_secondlist.findViewById(R.id.layout_detail_fragment_secondlist);
    detail_item_imv_secondlist = (ImageView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_imv_secondlist);
    detail_item_tv_title_secondlist = (TextView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_tv_title_secondlist);
    detail_item_tv_content_secondlist = (TextView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_tv_content_secondlist);
    detail_store = new ArrayList<StoreObject>();
    detail_store = DetailSecondListActivity.detail_store;
    startApp(savedInstanceState);
    return view_detail_secondlist;
}

刪除super.onCreateView(inflator, container, savedInstanceState); OnCreate in DetailSecondListViewPagerFragment

您正在使用支持片段類,如果您不針對舊的SDK,請將其更改為MapFragment

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM