diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index bb7a35655..79b57e3d8 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -159,6 +159,7 @@
page19.xml
+
@@ -175,6 +176,7 @@
Designer
+
diff --git a/apps/tests/pages/tab-view.ts b/apps/tests/pages/tab-view.ts
new file mode 100644
index 000000000..4b4e935ad
--- /dev/null
+++ b/apps/tests/pages/tab-view.ts
@@ -0,0 +1,23 @@
+var observableModule = require("data/observable");
+var vm = new observableModule.Observable();
+function onPageLoaded(args) {
+ var page = args.object;
+ vm.set("firstTitle", "fiiiirst");
+ vm.set("secondTitle", "secondTitle");
+ vm.set("secondIcon", "res://icon");
+ page.bindingContext = vm;
+}
+exports.onPageLoaded = onPageLoaded;
+var i = 0;
+function onTap() {
+ i++;
+ vm.set("firstTitle", "changed " + i);
+ if (i == 3) {
+ vm.set("firstIcon", "res://ic_action");
+ }
+ if (i == 4) {
+ vm.set("firstIcon", "");
+ }
+}
+exports.onTap = onTap;
+//# sourceMappingURL=tab-view.js.map
\ No newline at end of file
diff --git a/apps/tests/pages/tab-view.xml b/apps/tests/pages/tab-view.xml
new file mode 100644
index 000000000..fe8700ffd
--- /dev/null
+++ b/apps/tests/pages/tab-view.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/org.nativescript.widgets.d.ts b/org.nativescript.widgets.d.ts
index eb2a22c6a..ee122f956 100644
--- a/org.nativescript.widgets.d.ts
+++ b/org.nativescript.widgets.d.ts
@@ -151,6 +151,7 @@
setSelectedIndicatorColors(color: Array): void;
setItems(items: Array, viewPager: android.support.v4.view.ViewPager): void;
+ updateItemAt(position: number, itemSpec: TabItemSpec): void;
}
export class TabItemSpec {
diff --git a/ui/tab-view/tab-view.android.ts b/ui/tab-view/tab-view.android.ts
index 382a23e64..e67dcb18a 100644
--- a/ui/tab-view/tab-view.android.ts
+++ b/ui/tab-view/tab-view.android.ts
@@ -12,20 +12,14 @@ var ACCENT_COLOR = "colorAccent";
var PRIMARY_COLOR = "colorPrimary";
var DEFAULT_ELEVATION = 4;
-//var RESOURCE_PREFIX = "res://";
-
global.moduleMerge(common, exports);
export class TabViewItem extends common.TabViewItem {
- public _tab: android.app.ActionBar.Tab;
public _parent: TabView;
public _update() {
- if (this._parent && this._tab) {
- var androidApp = app.android;
- var resources = androidApp.context.getResources();
- this._tab.setText(this.title);
- this._parent._setIcon(this.iconSource, this._tab, resources, androidApp.packageName);
+ if (this._parent) {
+ this._parent._updateTabForItem(this);
}
}
}
@@ -209,19 +203,23 @@ export class TabView extends common.TabView {
trace.write("TabView._onItemsPropertyChangedSetNativeValue(" + data.oldValue + " ---> " + data.newValue + ");", common.traceCategory);
if (data.oldValue) {
+ var oldItems: Array = data.newValue;
+ oldItems.forEach((oldItem) => { oldItem._parent = null; });
+
this._viewPager.setAdapter(null);
this._pagerAdapter = null;
this._tabLayout.setItems(null, null);
}
if (data.newValue) {
- var items: Array = data.newValue;
+ var items: Array = data.newValue;
var tabItems = new Array();
items.forEach((item, idx, arr) => {
if (types.isNullOrUndefined(item.view)) {
throw new Error("View of TabViewItem at index " + idx + " is " + item.view);
}
+ item._parent = this;
tabItems.push(this.createTabItem(item));
});
@@ -234,6 +232,15 @@ export class TabView extends common.TabView {
this._updateSelectedIndexOnItemsPropertyChanged(data.newValue);
}
+ public _updateTabForItem(item: TabViewItem) {
+ if (this.items && this.items.length > 0) {
+ var index = this.items.indexOf(item);
+ if (index >= 0) {
+ this._tabLayout.updateItemAt(index, this.createTabItem(item));
+ }
+ }
+ }
+
public _onSelectedIndexPropertyChangedSetNativeValue(data: dependencyObservable.PropertyChangeData) {
trace.write("TabView._onSelectedIndexPropertyChangedSetNativeValue(" + data.oldValue + " ---> " + data.newValue + ");", common.traceCategory);
super._onSelectedIndexPropertyChangedSetNativeValue(data);
@@ -269,6 +276,7 @@ export class TabView extends common.TabView {
}
}
+ console.log("createTabItem: " + result.title + " result.iconId: " + result.iconId + " result.iconDrawable: " + result.iconDrawable);
return result;
}
}
\ No newline at end of file