Ipdate single item in tab view

This commit is contained in:
vakrilov
2015-09-03 15:04:05 +03:00
parent ff9ee707c0
commit d64b8660bd
5 changed files with 64 additions and 9 deletions

View File

@ -159,6 +159,7 @@
<TypeScriptCompile Include="apps\tests\pages\page19.ts">
<DependentUpon>page19.xml</DependentUpon>
</TypeScriptCompile>
<TypeScriptCompile Include="apps\tests\pages\tab-view.ts" />
<TypeScriptCompile Include="apps\tests\ui\animation\animation-tests.ts" />
<TypeScriptCompile Include="apps\tests\ui\search-bar\search-bar-tests-native.android.ts" />
<TypeScriptCompile Include="apps\tests\ui\search-bar\search-bar-tests-native.d.ts" />
@ -175,6 +176,7 @@
<Content Include="apps\tests\pages\page19.xml">
<SubType>Designer</SubType>
</Content>
<Content Include="apps\tests\pages\tab-view.xml" />
<Content Include="apps\ui-tests-app\app.css" />
<TypeScriptCompile Include="apps\ui-tests-app\pages\handlers.ts" />
<TypeScriptCompile Include="apps\ui-tests-app\pages\htmlview.ts" />

View File

@ -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

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Page loaded="onPageLoaded">
<TabView>
<TabView.items>
<TabViewItem title="{{ firstTitle }}" iconSource="{{ firstIcon }}">
<TabViewItem.view>
<GridLayout>
<Button tap="onTap" text="click" />
</GridLayout>
</TabViewItem.view>
</TabViewItem>
<TabViewItem title="{{ secondTitle }}" iconSource="{{ secondIcon }}">
<TabViewItem.view>
<GridLayout>
<Label text="Second Tab" verticalAlignment="center" horizontalAlignment="center"/>
</GridLayout>
</TabViewItem.view>
</TabViewItem>
</TabView.items>
</TabView>
</Page>

View File

@ -151,6 +151,7 @@
setSelectedIndicatorColors(color: Array<number>): void;
setItems(items: Array<TabItemSpec>, viewPager: android.support.v4.view.ViewPager): void;
updateItemAt(position: number, itemSpec: TabItemSpec): void;
}
export class TabItemSpec {

View File

@ -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<TabViewItem> = 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<definition.TabViewItem> = data.newValue;
var items: Array<TabViewItem> = data.newValue;
var tabItems = new Array<org.nativescript.widgets.TabItemSpec>();
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;
}
}