Problem
Google Maps Android API v2 are not compatible with the Holo theme.
We have experienced the same problem in our app : when Holo is not active, the maps work as expected. With Holo, the app crash.
There are the error logs :
05-15 10:33:55.700: E/TiApplication(25966): (main) [9931,10138] Sending event: exception on thread: main msg:java.lang.IllegalArgumentException: No view found for id 0x3e8 for fragment SupportMapFragment{436e6020 #0 id=0x3e8}; Titanium 3.1.0006,2013/05/06 12:00,2b7add3
05-15 10:33:55.700: E/TiApplication(25966): java.lang.IllegalArgumentException: No view found for id 0x3e8 for fragment SupportMapFragment{436e6020 #0 id=0x3e8}
05-15 10:33:55.700: E/TiApplication(25966): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:865)
05-15 10:33:55.700: E/TiApplication(25966): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
05-15 10:33:55.700: E/TiApplication(25966): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
05-15 10:33:55.700: E/TiApplication(25966): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
05-15 10:33:55.700: E/TiApplication(25966): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
05-15 10:33:55.700: E/TiApplication(25966): at android.os.Handler.handleCallback(Handler.java:605)
05-15 10:33:55.700: E/TiApplication(25966): at android.os.Handler.dispatchMessage(Handler.java:92)
05-15 10:33:55.700: E/TiApplication(25966): at android.os.Looper.loop(Looper.java:137)
05-15 10:33:55.700: E/TiApplication(25966): at android.app.ActivityThread.main(ActivityThread.java:4507)
05-15 10:33:55.700: E/TiApplication(25966): at java.lang.reflect.Method.invokeNative(Native Method)
05-15 10:33:55.700: E/TiApplication(25966): at java.lang.reflect.Method.invoke(Method.java:511)
05-15 10:33:55.700: E/TiApplication(25966): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
05-15 10:33:55.700: E/TiApplication(25966): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-15 10:33:55.700: E/TiApplication(25966): at dalvik.system.NativeStart.main(Native Method)
05-15 10:33:55.705: E/AndroidRuntime(25966): FATAL EXCEPTION: main
I have minimised his code to reproduce the error. There is the code for *app.js* :
(function() {
function ApplicationWindow(title) {
var self = Ti.UI.createWindow({ title:title });
self.activity.onCreateOptionsMenu = function (e) {
var actionBar = self.activity.actionBar;
actionBar.setTitle('Action bar');
actionBar.displayHomeAsUp = true;
actionBar.onHomeIconItemSelected = function () {};
};
if (title === 'Map') {
var MapModule = require('ti.map');
var mapview = MapModule.createView({
region: {latitude:33.74511, longitude:-84.38993,
latitudeDelta:0.01, longitudeDelta:0.01}
});
self.add(mapview);
}
return self;
};
var tabGroup = Ti.UI.createTabGroup();
var tabs = ['One', 'Two', 'Map'];
for (var i=0, l=tabs.length; i<l; i+=1) {
var win = new ApplicationWindow(tabs[i]),
tab = Ti.UI.createTab({title: tabs[i], window: win});
tabGroup.addTab(tab);
}
tabGroup.open();
})();
And there is the *tiapp.xml* file :
<?xml version="1.0" encoding="UTF-8"?>
<ti:app xmlns:ti="http://ti.appcelerator.org">
<id>com.enera.tabbedmap</id>
<name>Test</name>
<version>1.0</version>
<publisher>romainsalles</publisher>
<url>http://</url>
<description>not specified</description>
<copyright>foo</copyright>
<icon>appicon.png</icon>
<persistent-wifi>false</persistent-wifi>
<prerendered-icon>false</prerendered-icon>
<statusbar-style>default</statusbar-style>
<statusbar-hidden>false</statusbar-hidden>
<fullscreen>false</fullscreen>
<navbar-hidden>false</navbar-hidden>
<analytics>true</analytics>
<guid>22bd9dd2-b7a9-482b-9b64-e21eb739d636</guid>
<property name="ti.ui.defaultunit" type="string">system</property>
<iphone>
<orientations device="iphone">
<orientation>Ti.UI.PORTRAIT</orientation>
</orientations>
<orientations device="ipad">
<orientation>Ti.UI.PORTRAIT</orientation>
<orientation>Ti.UI.UPSIDE_PORTRAIT</orientation>
<orientation>Ti.UI.LANDSCAPE_LEFT</orientation>
<orientation>Ti.UI.LANDSCAPE_RIGHT</orientation>
</orientations>
</iphone>
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<uses-permission android:name="com.enera.tabbedmap.permission.MAPS_RECEIVE"/>
<permission android:name="com.enera.tabbedmap.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<application android:theme="@android:style/Theme.Holo">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDYBIo7m2GkNpiwQ2VpwfH_FwOtm8a_V-w"/>
</application>
</manifest>
</android>
<mobileweb>
<precache/>
<splash>
<enabled>true</enabled>
<inline-css-images>true</inline-css-images>
</splash>
<theme>default</theme>
</mobileweb>
<modules>
<module platform="android">ti.map</module>
</modules>
<deployment-targets>
<target device="blackberry">false</target>
<target device="android">true</target>
<target device="ipad">true</target>
<target device="iphone">true</target>
<target device="mobileweb">true</target>
<target device="tizen">false</target>
</deployment-targets>
<sdk-version>3.1.0.GA</sdk-version>
</ti:app>
When the app opens, just click on the *Map tab* and it will crash on devices with Holo.
We have tested on :
- Samsung Galaxy Ace (GT-S5830), android 2.3.3 -> *ok* (do not supports Holo)
- Sony Xperia (LT15i), android 2.3.3 -> *ok* (do not supports Holo)
- Samsung Galaxy S (GTI9000), android 2.3.3 -> *ok* (do not supports Holo)
- Samsung S2 (GT-I9100P), android 4.0.3 -> *crash* (supports Holo)
- Nexus S, android 4.1.2 -> *crash* (supports Holo)
- Samsung S3 (GT-I93000), android 4.1.2 -> *crash* (supports Holo)
It's really annoying : we have worked a lot to make our app more android friendly (holo, maps v2, GCM, new UX ...) and *we can't publish* it because of this problem.
Associated Q&A thread
http://developer.appcelerator.com/question/151567/google-maps-v2-module-crashes-when-view-placed-in-tab-group#comment-172642
Any news on this ?
A point which could help : we have found a hack to make the maps work with Holo. The trick is to add the mapview on the window focus. In my code example, you have to change this line :
by these ones :
I hope it helps to solve the issue.
the hack is not working for me. Map in tabgroup always crash the app.
Still having problems here. Holo-Theme + Ti.Maps-Module crashes the app: E/TiApplication(21096): java.lang.IllegalArgumentException: No view found for id 0x3e8 for fragment SupportMapFragment{414b1710 #0 id=0x3e8} E/TiApplication(21096): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:865) E/TiApplication(21096): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083) E/TiApplication(21096): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635) E/TiApplication(21096): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431) E/TiApplication(21096): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
Tested and reproduced the bug with 3.2.0.GA, Android 4.0.4 and ti.map 2.1.2. Work around suggested by [~romain.salles] worked for me. [~hansknoechel], did you try this suggestion?
I have the same issue as well on 3.2.0.GA, Android 4.0.4 and ti.map 2.1.2. Only way I can get the map to show, is if I create a brand new window and add it to that using the focus hack above. Here's the crash output from my Nexus 5:
master PR: https://github.com/appcelerator/titanium_mobile/pull/5462
3.2.x PR: https://github.com/appcelerator/titanium_mobile/pull/5499
Verified fix using below environment: Appc Studio: 3.2.3.201403190645 Sdk: 3.2.3.v20140323211726 acs: 1.0.14 npm: 1.3.2 alloy:1.3.1 titanium:3.2.1 titanium-code-processor:1.1.0 Xcode: 5.1 Osx: Maverick(10.9.2) Device: Nexus 7 (V 4.4.2) Android: Maps v2 does not crashes inside Tab.