0

我想在ViewPager中使用MapFragment。儘管我將FragmentManager定義爲SupportFragmentManager,但如果我滑動到包含MapFragment的頁面,則會看到InflateException。我閱讀了大部分提到這個問題的標題,但看不到解決方案。我希望你可以。這裏是我MapFragment類的佈局:Android查看InflateException使用ViewPager時

<?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:orientation="vertical"> 

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

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginLeft="7dp" 
     android:orientation="vertical" 
     android:gravity="left"> 

     <ImageButton 
      android:id="@+id/searchButton" 
      android:background="@drawable/search_button" 
      android:layout_marginTop="10dp" 
      android:layout_width="50dip" 
      android:layout_height="50dip" 
      android:layout_alignParentTop="true"/> 

     <ImageButton 
      android:id="@+id/originButton" 
      android:background="@drawable/origin_button" 
      android:layout_marginBottom="10dp" 
      android:layout_marginRight="7dp" 
      android:layout_width="50dip" 
      android:layout_height="50dip" 
      android:layout_alignParentBottom="true"/> 

     <ImageButton 
      android:id="@+id/earthButton" 
      android:background="@drawable/earth_button" 
      android:layout_marginBottom="10dp" 
      android:layout_width="50dip" 
      android:layout_height="50dip" 
      android:layout_alignParentBottom="true" 
      android:layout_toRightOf="@id/originButton"/> 


    </RelativeLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_marginRight="14dp" 
     android:orientation="vertical" 
     android:gravity="right" > 

     <ImageButton 
      android:id="@+id/plusButton" 
      android:background="@drawable/plus_button" 
      android:layout_centerInParent="true" 
      android:layout_width="50dip" 
      android:layout_height="50dip"/> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="7dp" 
      android:layout_weight="1"/> 

     <ImageButton 
      android:id="@+id/minusButton" 
      android:background="@drawable/minus_button" 
      android:layout_centerInParent="true" 
      android:layout_width="50dip" 
      android:layout_height="50dip"/> 

    </LinearLayout> 
</RelativeLayout> 

日誌:

Process: net.geotune.app, PID: 17582 
      android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
      at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
      at net.geotune.app.dorukhan.MapFragment.onCreateView(MapFragment.java:177) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 
      at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1302) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:729) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 
      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486) 
      at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) 
      at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:555) 
      at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) 
      at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495) 
      at net.geotune.app.main.MainPager.onTabSelected(MainPager.java:95) 
      at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:578) 
      at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1108) 
      at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:556) 
      at android.view.View.performClick(View.java:4478) 
      at android.view.View$PerformClick.run(View.java:18698) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:149) 
      at android.app.ActivityThread.main(ActivityThread.java:5268) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
      at dalvik.system.NativeStart.main(Native Method) 
      Caused by: java.lang.IllegalArgumentException: Binary XML file line #8: Duplicate id 0x7f090093, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment 
      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2164) 
      at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$WrapperFactory.onCreateView(CalligraphyLayoutInflater.java:249) 
      at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:163) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
            at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
            at net.geotune.app.dorukhan.MapFragment.onCreateView(MapFragment.java:177) 
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 
            at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1302) 
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:729) 
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 
            at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486) 
            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) 
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:555) 
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) 
            at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495) 
            at net.geotune.app.main.MainPager.onTabSelected(MainPager.java:95) 
            at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:578) 
            at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1108) 
            at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:556) 
            at android.view.View.performClick(View.java:4478) 
            at android.view.View$PerformClick.run(View.java:18698) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:149) 
            at android.app.ActivityThread.main(ActivityThread.java:5268) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
            at dalvik.system.NativeStart.main(Native Method) 

我在ViewPager的類的以下部分的錯誤:

@Override 
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

最後的build.gradle :

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 
    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/license.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/notice.txt' 
     exclude 'META-INF/ASL2.0' 
    } 
    defaultConfig { 
     applicationId 'net.geotune.app' 
     minSdkVersion 19 
     targetSdkVersion 19 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
    productFlavors { 
    } 
} 

repositories { 
    flatDir { 
     dirs 'libs' 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:21.0.3' 
    compile 'com.google.android.gms:play-services:6.5.87' 
    compile 'com.spotify.sdk:spotify-player:[email protected]' 
    compile 'com.spotify.sdk:spotify-auth:[email protected]' 
    compile files('libs/Android/android-async-http-1.3.1.jar') 
    compile files('libs/Android/jackson-core-asl-1.8.5.jar') 
    compile files('libs/Android/jackson-mapper-asl-1.8.5.jar') 
    compile files('libs/Android/KumulosAndroid.0.2.3.jar') 
    compile files('libs/spotify-web-api-android-0.1.0.jar') 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.squareup.okhttp:okhttp:2.2.0' 
    compile group: 'io.orchestrate', name: 'orchestrate-client', version: '0.9.0' 
    compile 'uk.co.chrisjenx:calligraphy:2.0.2' 
    compile 'com.sothree.slidinguppanel:library:3.0.0' 
} 

我知道我在上面添加了太多的代碼,我很抱歉。我只是想竭盡全力。

+0

Dorukhan,你有沒有運氣修理這個傢伙? –

+0

耶。我將爲你解答這個問題。 –

回答

0

沒有gradle和佈局文件都沒有問題。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    if (container == null) 
     return null; 

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

    try { 
     v = inflater.inflate(R.layout.fragment_map, container, false); 
    } catch (InflateException e) { } 

    mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); 

    if (mapFragment != null) { 
     mapFragment.onCreate(savedInstanceState); 
     mapFragment.onResume(); 

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

     googleMap = mapFragment.getMap(); 
     // Do whatever you want on map here 
    } 
    return v;  
} 

這個問題在this question深入的討論:MapFragment的onCreateView()應設置如下。因此,我沒有詳細解釋代碼段。

相關問題