I am trying to use MapFragment in ViewPager. Although I defined FragmentManager as SupportFragmentManager, if I slide to the page contains MapFragment, I see InflateException. I read most of the titles mentioned this issue but cannot see a solution yet. I hope you can. Here is the layout of my MapFragment class:
<?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>
The log:
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)
I got the error in the following segment of ViewPager's class:
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
viewPager.setCurrentItem(tab.getPosition());
}
Lastly, 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:1.0.0-beta9@aar'
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
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'
}
I know I added too much code above, I am sorry for that. I just want to leave no stone unturned.