{ "id": "120880", "key": "TIMOB-15408", "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": null, "resolutiondate": null, "created": "2013-10-07T20:50:07.000+0000", "priority": { "name": "Low", "id": "4" }, "labels": [], "versions": [ { "id": "14982", "description": "Release 3.2.0", "name": "Release 3.2.0", "archived": false, "released": true, "releaseDate": "2013-12-19" } ], "issuelinks": [ { "id": "32342", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "112760", "key": "TIMOB-13610", "fields": { "summary": "Android: Proposed fix for poor user experience when scrollableView is inside tableview/listview/scrollview", "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": "Medium", "id": "3" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "32447", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "114334", "key": "TIMOB-13868", "fields": { "summary": "Android: ScrollableView pages within ListView not displayed correctly", "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": "Medium", "id": "3" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } } }, { "id": "32572", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "119791", "key": "TIMOB-15268", "fields": { "summary": "Android: ListView: Don't create template proxies on the JavaScript side", "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": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } } ], "assignee": null, "updated": "2018-02-28T20:04:02.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "After fixing TIMOB-13610, there are a few issues exposed on the Android platform.\r\n1. Run the test case for tableview without {code}className: \"scrollable\"{code}. Scroll the first row to the green view. Scroll the tableview down to the bottom and then up to the top. Scroll the first row to other color again. The app crashes with the error \"E/AndroidRuntime( 4744): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.\"\r\n2. Run the test case for tableview with/without {code}className: \"scrollable\"{code}. Scroll the first row to the green view and then scroll the tableview up and down several times. The first row does not stay at the green view. Probably because the item views in the TableView get recycled when they are off screen.\r\n-3.- Run the test case for listview. Scroll the first row to page 2. Expected behavior: page 2 is a yellow view. Actual behavior: page 2 is a white view. (TIMOB-13868)\r\n4. Run the test case for listview. Scroll the first row to the green view and then scroll the listview up and down several times. The first row does not stay at the green view and the other rows do not stay at the blue views. Probably because the item views in the ListView get recycled when they are off screen. \r\n{code}\r\n--------------------- Test case for TableView ----------------------------\r\nvar win = Ti.UI.createWindow({\r\n backgroundColor : 'white',\r\n modal : false\r\n});\r\n \r\nvar table = Ti.UI.createTableView();\r\nvar rowData = [];\r\n \r\nfor (var i = 0; i < 10; i++) {\r\n var scrollable = Ti.UI.createScrollableView({\r\n top : 0,\r\n left : 0,\r\n bottom : 0,\r\n right : 0,\r\n backgroundColor : 'orange',\r\n views : [Ti.UI.createView({\r\n backgroundColor : 'blue'\r\n }), Ti.UI.createView({\r\n backgroundColor : 'green'\r\n }), Ti.UI.createView({\r\n backgroundColor : 'yellow'\r\n })]\r\n });\r\n \r\n var row = Ti.UI.createTableViewRow({\r\n //className: \"scrollable\"\r\n height : 300\r\n });\r\n row.add(scrollable);\r\n rowData.push(row);\r\n}\r\n \r\nfor (var i = 0; i < 40; i++) {\r\n rowData.push(Ti.UI.createTableViewRow({\r\n title : (\"test2 \" + i)\r\n }));\r\n}\r\ntable.data = rowData;\r\n \r\nwin.add(table);\r\nwin.open(); \r\n{code}\r\n{code}\r\n--------------------- Test case for ListView ----------------------------\r\nvar win = Ti.UI.createWindow({backgroundColor: 'white'});\r\n \r\nvar plainTemplate = {\r\n childTemplates: [\r\n {\r\n type: 'Ti.UI.ScrollableView',\r\n bindId: 'scrollable',\r\n properties: {\r\n height: '300'\r\n }\r\n }\r\n ]\r\n};\r\n \r\nvar listView = Ti.UI.createListView({\r\n templates: { 'plain': plainTemplate },\r\n defaultItemTemplate: 'plain' \r\n});\r\n \r\nvar data = [];\r\nfor (var i = 0; i < 10; i++) {\r\n data.push({\r\n scrollable : { views : [Ti.UI.createView({\r\n backgroundColor : 'blue'\r\n }), Ti.UI.createView({\r\n backgroundColor : 'green'\r\n }), Ti.UI.createView({\r\n backgroundColor : 'yellow'\r\n })] }\r\n });\r\n}\r\n \r\nvar section = Ti.UI.createListSection({items: data});\r\nlistView.sections = [section];\r\n \r\nwin.add(listView);\r\nwin.open();\r\n{code}", "attachment": [], "flagged": false, "summary": "Android: TableView/ListView behaves incorrectly when ScrollableView inside TableView/ListView", "creator": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [ { "id": "114334", "key": "TIMOB-13868", "fields": { "summary": "Android: ScrollableView pages within ListView not displayed correctly", "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": "Medium", "id": "3" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } }, { "id": "121350", "key": "TIMOB-15520", "fields": { "summary": "Android: ScrollableView doesn't work properly in TableView", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "Low", "id": "4" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } } ], "reporter": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "274171", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-10-08T16:21:06.000+0000", "updated": "2013-10-08T16:21:06.000+0000" }, { "id": "275500", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "It is likely we will do the fixes for ListView in 3.2.1, but we might defer the fixes for TableView.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-10-17T20:43:54.000+0000", "updated": "2013-10-17T20:43:54.000+0000" }, { "id": "275589", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Ingo: Actually the tableview fixes are the easier to fix (and one is actually not related to tableview), about one line change without any chance of regression.\r\nThe listview fix is a lot harder i think, still great news if you can fix it soon ", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-10-18T06:49:14.000+0000", "updated": "2013-10-18T06:49:14.000+0000" }, { "id": "275661", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~farfromrefuge] I would be curious to know what the one line fix is for TableView and how we can ensure it won't cause any regressions.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-10-18T16:30:25.000+0000", "updated": "2013-10-18T16:30:25.000+0000" }, { "id": "275755", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Ingo:\r\n* the currentPage fix is about adding a new property TiC.PROPERTY_CURRENT_PAGE to onProcessProperties and onPropertyChange. That will allow the tableview and the listview to set the correct page when preparing a cell. No chance of regression (a bug though is always possible ;) ). I have it running just fine in my branch.\r\n* the problem with clearChildViews can be fixed in one line. This is not clean but has no chance of regression: just make sure it calls setView(null) for the scrollable \"views\". Now this is not clean. The way i did it was with some refactoring. clearChildViews was moved to TIViewProxy and is handled correctly by each class. This is the way to go but with refactoring there are always chance of regression.\r\n\r\nNow i am sorry i cant make a PR, my code is a lot too far from the master branch and PR are too hard to maintain. Though i think i have guided you enough for it to be easily fixed.", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-10-18T22:34:34.000+0000", "updated": "2013-10-18T22:34:34.000+0000" }, { "id": "323248", "author": { "name": "jithinv@exalture.com", "key": "jithinv@exalture.com", "displayName": "jithinpv", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Issue No.1 reproduces\r\n\r\nTitanium SDK version 3.4.0 master, 3.2.0.GA\r\nTitanium Studio, build: 3.3.0.201407100905\r\nTitanium Command-Line Interface\r\nCLI version 3.3.0, \r\nAndroid device : Motorola Moto G, Android version : 4.4.4\r\n", "updateAuthor": { "name": "jithinv@exalture.com", "key": "jithinv@exalture.com", "displayName": "jithinpv", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-09-12T11:26:53.000+0000", "updated": "2014-09-12T11:26:53.000+0000" } ], "maxResults": 7, "total": 7, "startAt": 0 } } }