{ "id": "61343", "key": "TIMOB-711", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": { "id": "5", "description": "All attempts at reproducing this issue failed, or not enough information was available to reproduce the issue. Reading the code produces no clues as to why this behavior would occur. If more information appears later, please reopen the issue.", "name": "Cannot Reproduce" }, "resolutiondate": "2012-07-25T14:14:06.000+0000", "created": "2011-04-15T02:34:57.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "android", "defect" ], "versions": [], "issuelinks": [ { "id": "19176", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "94532", "key": "TIMOB-9901", "fields": { "summary": "TiAPI: Review and clean up platform bugs and reduce bug count by 20%.", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false } } } } ], "assignee": { "name": "ngupta", "key": "ngupta", "displayName": "Neeraj Gupta", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2012-10-25T10:12:07.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "{html}

My second defect relating to TableViewRows.

\n

if you create a few TableViewRows containing a few different\nlayouts but give them the same className.

\n

When you change orientation Android crashes. Documentation\nshould probably be more explicit about the importance of clasName,\nand at least trap and report the error (later inteligent hash for\nclassName?)

\n

Salient exception below from the Orientation changed\nevent...

\n

W/InputManagerService( 75): Window already focused, ignoring\nfocus gain of:\ncom.android.internal.view.IInputMethodClient$Stub$Proxy@4339b338
\nI/WindowManager( 75): onOrientationChanged, rotation changed to\n1
\nI/WindowManager( 75): Setting rotation to 1, animFlags=0
\nI/WindowManager( 75): Config changed: { scale=1.0 imsi=0/0\nloc=en_GB touch=3 keys=2/1/2 nav=3 orien=2 layout=18}
\nD/LAYOUT ( 2636): (main) [3738,15715] TabHost {0,0,480,295}
\nD/LAYOUT ( 2636): (main) [5,15720] TiTableView {0,0,480,227}
\nD/TiFileFactory( 2636): (main) [16,15736] getting initial from\nparts: app://images/smile_logo.png
\nD/TiFileFactory( 2636): (main) [5,15741] getting initial from\nparts: file:///android_asset/Resources/images/smile_logo.png
\nD/TiBackground( 2636): (main) [5,15746]\nbackground=BitmapDrawable,state.len=2,state[0]=16842909
\nD/AndroidRuntime( 2636): Shutting down VM
\nW/dalvikvm( 2636): threadid=3: thread exiting with uncaught\nexception (group=0x4001da28)
\nD/StatusBar( 75): updateResources
\nE/TiUncaughtHandler( 2636): (main) [7,15753] Sending event:\nexception on thread: main\nmsg:java.lang.ArrayIndexOutOfBoundsException
\nE/TiUncaughtHandler( 2636):\njava.lang.ArrayIndexOutOfBoundsException
\nE/TiUncaughtHandler( 2636): at\nti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(Unknown\nSource)
\nE/TiUncaughtHandler( 2636): at\nti.modules.titanium.ui.widget.tableview.TiTableView$TTVListAdapter.getView(Unknown\nSource)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.AbsListView.obtainView(AbsListView.java:1255)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.ListView.makeAndAddView(ListView.java:1658)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.ListView.fillSpecific(ListView.java:1212)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.ListView.layoutChildren(ListView.java:1494)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.AbsListView.onLayout(AbsListView.java:1112)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\norg.appcelerator.titanium.view.TiCompositeLayout.onLayout(Unknown\nSource)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.LinearLayout.onLayout(LinearLayout.java:918)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\norg.appcelerator.titanium.view.TiCompositeLayout.onLayout(Unknown\nSource)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.widget.FrameLayout.onLayout(FrameLayout.java:333)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.View.layout(View.java:6569)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.ViewRoot.performTraversals(ViewRoot.java:979)
\nE/TiUncaughtHandler( 2636): at\nandroid.view.ViewRoot.handleMessage(ViewRoot.java:1613)
\nE/TiUncaughtHandler( 2636): at\nandroid.os.Handler.dispatchMessage(Handler.java:99)
\nE/TiUncaughtHandler( 2636): at\nandroid.os.Looper.loop(Looper.java:123)
\nE/TiUncaughtHandler( 2636): at\nandroid.app.ActivityThread.main(ActivityThread.java:4203)
\nE/TiUncaughtHandler( 2636): at\njava.lang.reflect.Method.invokeNative(Native Method)
\nE/TiUncaughtHandler( 2636): at\njava.lang.reflect.Method.invoke(Method.java:521)
\nE/TiUncaughtHandler( 2636): at\ncom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
\nE/TiUncaughtHandler( 2636): at\ncom.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
\nE/TiUncaughtHandler( 2636): at\ndalvik.system.NativeStart.main(Native Method)
\nD/dalvikvm( 2636): GC freed 8533 objects / 529456 bytes in\n174ms
\nD/TiApplication( 2636): (main) [1102,16855] Analytics Event:\ntype=ti.crash
\nD/TiApplication( 2636): event=ti.crash
\nD/TiApplication( 2636): timestamp=2010-04-03T02:50:32.179+0000
\nD/TiApplication( 2636): mid=200145da90baeb2c
\nD/TiApplication( 2636):\nsid=846bba95-0f52-4b77-b31c-9c1645e4f576
\nD/TiApplication( 2636):\naguid=f47edb0e-2f5a-4399-bd28-d6fa66bb8e60
\nD/TiApplication( 2636): isJSON=true

{html}", "attachment": [], "flagged": false, "summary": "Android TableViewRow's with same className and different layout crash", "creator": { "name": "danmullineux", "key": "danmullineux", "displayName": "Dan Mullineux", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "danmullineux", "key": "danmullineux", "displayName": "Dan Mullineux", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "123870", "author": { "name": "bryanjackson", "key": "bryanjackson", "displayName": "Bryan Jackson", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

The rows do not have to have a different layout to be affected.\nI have many tables that blow up seemingly at random unless the\nclass name is unique for every row (even if the the layout is the\nsame and just the text of a label is different). The fix for now is\nto make classname unique for every row of every table.

\n

1) Rows sometimes change positions or disappear while\nscrolling.
\n2) The application will crash at random

{html}", "updateAuthor": { "name": "bryanjackson", "key": "bryanjackson", "displayName": "Bryan Jackson", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T02:34:58.000+0000", "updated": "2011-04-15T02:34:58.000+0000" }, { "id": "123871", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

I've fixed most of the issues surround weird re-drawing. The\nroot of the problem was we were always reusing views when no\nclassName was provided (since all rows had the same default class\nname). See this issue:
\n\nhttps://appcelerator.lighthouseapp.com/projects/32238/tickets/1193-...

\n

Would you guys mind updating to the latest? I haven't been able\nto reproduce the \"same class different layout\" crash with the\ncurrent code

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T02:34:59.000+0000", "updated": "2011-04-15T02:34:59.000+0000" }, { "id": "209398", "author": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Cannot reproduce.", "updateAuthor": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-07-25T14:13:49.000+0000", "updated": "2012-07-25T14:13:49.000+0000" }, { "id": "224580", "author": { "name": "kenthao", "key": "kenthao", "displayName": "kent hao", "active": true, "timeZone": "America/Los_Angeles" }, "body": "it's not fixed. In 2.1.1, it's still there, when i use the same className for rows with different layout, the app will crash.", "updateAuthor": { "name": "kenthao", "key": "kenthao", "displayName": "kent hao", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-10-21T08:18:56.000+0000", "updated": "2012-10-21T08:18:56.000+0000" }, { "id": "224581", "author": { "name": "kenthao", "key": "kenthao", "displayName": "kent hao", "active": true, "timeZone": "America/Los_Angeles" }, "body": "my log is like this:\r\n10-21 16:15:47.730: E/TiApplication(27248): (main) [3061,8154] Sending event: exception on thread: main msg:java.lang.ArrayIndexOutOfBoundsException: length=1; index=1; Titanium 2.1.1,2012/07/27 14:01,0fd84a2\r\n10-21 16:15:47.730: E/TiApplication(27248): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.applyChildProxies(TiTableViewRowProxyItem.java:164)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.applyChildProxies(TiTableViewRowProxyItem.java:167)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.applyChildProxies(TiTableViewRowProxyItem.java:167)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.applyChildProxies(TiTableViewRowProxyItem.java:167)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.refreshControls(TiTableViewRowProxyItem.java:144)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:280)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:83)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat ti.modules.titanium.ui.widget.tableview.TiTableView$TTVListAdapter.getView(TiTableView.java:216)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.AbsListView.obtainView(AbsListView.java:2195)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.ListView.makeAndAddView(ListView.java:1774)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.ListView.fillDown(ListView.java:672)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.ListView.fillGap(ListView.java:636)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.AbsListView.trackMotionScroll(AbsListView.java:5257)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3057)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.widget.AbsListView.onTouchEvent(AbsListView.java:3398)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.View.dispatchTouchEvent(View.java:5681)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1951)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1712)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2063)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1399)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.app.Activity.dispatchTouchEvent(Activity.java:2364)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2011)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.View.dispatchPointerEvent(View.java:5861)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3094)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2614)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:978)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2623)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.os.Handler.dispatchMessage(Handler.java:99)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.os.Looper.loop(Looper.java:137)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat android.app.ActivityThread.main(ActivityThread.java:4507)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat java.lang.reflect.Method.invokeNative(Native Method)\r\n10-21 16:15:47.730: E/TiApplication(27248): \tat java.lang.reflect.Method.i\r\n", "updateAuthor": { "name": "kenthao", "key": "kenthao", "displayName": "kent hao", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-10-21T08:20:42.000+0000", "updated": "2012-10-21T08:20:42.000+0000" }, { "id": "224905", "author": { "name": "mbelkin", "key": "mbelkin", "displayName": "Michael Belkin", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I've been able to reproduce this with something as simple as using a different font on a row with the same className. The (complex) row's were constructed the same, but some had italic font while others had regular on one of the labels.", "updateAuthor": { "name": "mbelkin", "key": "mbelkin", "displayName": "Michael Belkin", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-10-25T10:12:07.000+0000", "updated": "2012-10-25T10:12:07.000+0000" } ], "maxResults": 6, "total": 6, "startAt": 0 } } }