mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 03:31:45 +08:00
Ipdate single item in tab view
This commit is contained in:
@ -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" />
|
||||
|
23
apps/tests/pages/tab-view.ts
Normal file
23
apps/tests/pages/tab-view.ts
Normal 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
|
21
apps/tests/pages/tab-view.xml
Normal file
21
apps/tests/pages/tab-view.xml
Normal 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>
|
1
org.nativescript.widgets.d.ts
vendored
1
org.nativescript.widgets.d.ts
vendored
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user