diff --git a/apps/app/ui-tests-app/list-view/item-re-layout.css b/apps/app/ui-tests-app/list-view/item-re-layout.css
new file mode 100644
index 000000000..0cb4471e5
--- /dev/null
+++ b/apps/app/ui-tests-app/list-view/item-re-layout.css
@@ -0,0 +1,20 @@
+Label {
+ margin: 6;
+ padding: 4;
+}
+
+.unselected {
+ border-width: 4;
+ border-color: gray;
+ border-radius: 10;
+ background: white;
+ color: gray
+}
+
+.selected {
+ border-width: 4;
+ border-color: blue;
+ border-radius: 10;
+ background: lightcoral;
+ color: blue;
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/list-view/item-re-layout.ts b/apps/app/ui-tests-app/list-view/item-re-layout.ts
new file mode 100644
index 000000000..386fd56b7
--- /dev/null
+++ b/apps/app/ui-tests-app/list-view/item-re-layout.ts
@@ -0,0 +1,21 @@
+import { fromObject } from "tns-core-modules/data/observable";
+
+export function loaded(args) {
+ var items = [];
+
+ for (let i = 0; i < 100; i++) {
+ items.push(fromObject({
+ text: "<" + i + ">",
+ selected: !!!(i % 5)
+ }));
+ }
+ args.object.bindingContext = { items: items };
+}
+
+export function toggle(args) {
+ console.log("toggle : ")
+ let context = args.object.bindingContext;
+ console.dir(context);
+ context.set("selected", !context.selected);
+ // args.object.requestLayout();
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/list-view/item-re-layout.xml b/apps/app/ui-tests-app/list-view/item-re-layout.xml
new file mode 100644
index 000000000..eea34ee18
--- /dev/null
+++ b/apps/app/ui-tests-app/list-view/item-re-layout.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/list-view/main-page.ts b/apps/app/ui-tests-app/list-view/main-page.ts
index cae03b6e9..e467105d8 100644
--- a/apps/app/ui-tests-app/list-view/main-page.ts
+++ b/apps/app/ui-tests-app/list-view/main-page.ts
@@ -19,6 +19,7 @@ export function loadExamples() {
examples.set("scrolling-and-sizing", "list-view/scrolling-and-sizing");
examples.set("row-height", "list-view/row-height");
examples.set("width-percent", "list-view/width-percent");
+ examples.set("item-re-layout", "list-view/item-re-layout");
return examples;
}
diff --git a/tests/app/ui/list-view/list-view-tests.ts b/tests/app/ui/list-view/list-view-tests.ts
index f33a18de3..400b8c488 100644
--- a/tests/app/ui/list-view/list-view-tests.ts
+++ b/tests/app/ui/list-view/list-view-tests.ts
@@ -1,22 +1,22 @@
-import * as testModule from "../../ui-test";
-import * as TKUnit from "../../TKUnit";
-import * as app from "tns-core-modules/application";
-import * as observable from "tns-core-modules/data/observable";
-import * as types from "tns-core-modules/utils/types";
-import * as platform from "tns-core-modules/platform";
-import * as utils from "tns-core-modules/utils/utils";
-import { Label } from "tns-core-modules/ui/label";
+import * as TKUnit from "../../TKUnit";
import * as helper from "../helper";
+import { UITest } from "../../ui-test";
+import { getResources as appGetResources } from "tns-core-modules/application";
+import { Observable, EventData } from "tns-core-modules/data/observable";
+import { isFunction, isUndefined } from "tns-core-modules/utils/types";
+import { isAndroid, isIOS } from "tns-core-modules/platform";
+import { GC } from "tns-core-modules/utils/utils";
import { Page } from "tns-core-modules/ui/page";
-import { View, KeyedTemplate, isIOS } from "tns-core-modules/ui/core/view";
+import { View, KeyedTemplate } from "tns-core-modules/ui/core/view";
+import { MyButton, MyStackLayout } from "../layouts/layout-helper";
// >> article-require-listview-module
-import * as listViewModule from "tns-core-modules/ui/list-view";
+import { ListView, ItemEventData } from "tns-core-modules/ui/list-view";
// << article-require-listview-module
// >> article-require-modules-listview
-import * as observableArray from "tns-core-modules/data/observable-array";
-import * as labelModule from "tns-core-modules/ui/label";
+import { ObservableArray } from "tns-core-modules/data/observable-array";
+import { Label } from "tns-core-modules/ui/label";
// << article-require-modules-listview
// >> article-item-tap
@@ -46,22 +46,22 @@ for (var i = 0; i < 100; i++) {
MANY_ITEMS.push(i);
}
-export class ListViewTest extends testModule.UITest {
+export class ListViewTest extends UITest {
- public create(): listViewModule.ListView {
- return new listViewModule.ListView();
+ public create(): ListView {
+ return new ListView();
}
public test_recycling() {
- helper.nativeView_recycling_test(() => new listViewModule.ListView());
+ helper.nativeView_recycling_test(() => new ListView());
}
public test_default_TNS_values() {
// >> article-create-listview
- var listView = new listViewModule.ListView();
+ var listView = new ListView();
// << article-create-listview
- TKUnit.assert(types.isUndefined(listView.items), "Default listView.items should be undefined");
+ TKUnit.assert(isUndefined(listView.items), "Default listView.items should be undefined");
}
public test_set_items_to_array_loads_all_items(done) {
@@ -71,21 +71,21 @@ export class ListViewTest extends testModule.UITest {
// >> article-listview-array
var colors = ["red", "green", "blue"];
listView.items = colors;
- listView.on(listViewModule.ListView.itemLoadingEvent, function (args: listViewModule.ItemEventData) {
+ listView.on(ListView.itemLoadingEvent, function (args: ItemEventData) {
if (!args.view) {
// Create label if it is not already created.
- args.view = new labelModule.Label();
+ args.view = new Label();
}
- (args.view).text = colors[args.index];
+ (