Added TabViewItem change support for Android. Fixed empty titles for SegmentedBar and TabView.

This commit is contained in:
Rossen Hristov
2015-09-01 09:55:25 +03:00
parent 221fb34102
commit b848d2f02d
5 changed files with 74 additions and 20 deletions

View File

@ -46,10 +46,8 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (newItems && newItems.length) { if (newItems && newItems.length) {
for (var i = 0; i < newItems.length; i++) { for (var i = 0; i < newItems.length; i++) {
(<SegmentedBarItem>newItems[i])._parent = view; (<SegmentedBarItem>newItems[i])._parent = view;
var title = "" + newItems[i].title;
var tab = view.android.newTabSpec(i + ""); var tab = view.android.newTabSpec(i + "");
tab.setIndicator(newItems[i].title || "");
tab.setIndicator(title);
tab.setContent(new android.widget.TabHost.TabContentFactory({ tab.setContent(new android.widget.TabHost.TabContentFactory({
createTabContent: function (tag: string): android.view.View { createTabContent: function (tag: string): android.view.View {
@ -124,7 +122,7 @@ export class SegmentedBarItem extends common.SegmentedBarItem {
var tabIndex = this._parent.items.indexOf(this); var tabIndex = this._parent.items.indexOf(this);
var titleTextViewId = 16908310; // http://developer.android.com/reference/android/R.id.html#title var titleTextViewId = 16908310; // http://developer.android.com/reference/android/R.id.html#title
var titleTextView = <android.widget.TextView>this._parent.android.getTabWidget().getChildAt(tabIndex).findViewById(titleTextViewId); var titleTextView = <android.widget.TextView>this._parent.android.getTabWidget().getChildAt(tabIndex).findViewById(titleTextViewId);
titleTextView.setText("" + this.title); titleTextView.setText(this.title || "");
} }
} }
} }

View File

@ -43,7 +43,7 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var newItems = <Array<definition.SegmentedBarItem>>data.newValue; var newItems = <Array<definition.SegmentedBarItem>>data.newValue;
if (newItems && newItems.length) { if (newItems && newItems.length) {
for (var i = 0; i < newItems.length; i++) { for (var i = 0; i < newItems.length; i++) {
view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title, i, false); view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title || "", i, false);
(<SegmentedBarItem>newItems[i])._parent = view; (<SegmentedBarItem>newItems[i])._parent = view;
} }
@ -70,7 +70,7 @@ export class SegmentedBarItem extends common.SegmentedBarItem {
public _update() { public _update() {
if (this._parent) { if (this._parent) {
var tabIndex = this._parent.items.indexOf(this); var tabIndex = this._parent.items.indexOf(this);
this._parent.ios.setTitleForSegmentAtIndex("" + this.title, tabIndex); this._parent.ios.setTitleForSegmentAtIndex(this.title || "", tabIndex);
} }
} }
} }

View File

@ -20,6 +20,7 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView
set title(value: string) { set title(value: string) {
if (this._title !== value) { if (this._title !== value) {
this._title = value; this._title = value;
this._update();
} }
} }
@ -29,6 +30,9 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView
set view(value: view.View) { set view(value: view.View) {
if (this._view !== value) { if (this._view !== value) {
if (this._view) {
throw new Error("Changing the view of an already loaded TabViewItem is not currently supported.");
}
this._view = value; this._view = value;
} }
} }
@ -40,8 +44,13 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView
set iconSource(value: string) { set iconSource(value: string) {
if (this._iconSource !== value) { if (this._iconSource !== value) {
this._iconSource = value; this._iconSource = value;
this._update();
} }
} }
public _update() {
//
}
} }
var TAB_VIEW = "TabView"; var TAB_VIEW = "TabView";

View File

@ -133,6 +133,20 @@ class PagerAdapterClass extends android.support.v4.view.PagerAdapter {
} }
}; };
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);
}
}
}
export class TabView extends common.TabView { export class TabView extends common.TabView {
private _android: android.support.v4.view.ViewPager; private _android: android.support.v4.view.ViewPager;
private _pagerAdapter: android.support.v4.view.PagerAdapter; private _pagerAdapter: android.support.v4.view.PagerAdapter;
@ -374,13 +388,15 @@ export class TabView extends common.TabView {
// TODO: Where will be the support for more ActionBar settings like Title, Navigation buttons, etc.? // TODO: Where will be the support for more ActionBar settings like Title, Navigation buttons, etc.?
var i: number = 0; var i: number = 0;
var length = newItems.length; var length = newItems.length;
var item: definition.TabViewItem; var item: TabViewItem;
var tab: android.app.ActionBar.Tab; var tab: android.app.ActionBar.Tab;
var androidApp = app.android; var androidApp = app.android;
var resources = androidApp.context.getResources(); var resources = androidApp.context.getResources();
for (i; i < length; i++) { for (i; i < length; i++) {
item = newItems[i]; item = <TabViewItem>newItems[i];
tab = actionBar.newTab(); tab = actionBar.newTab();
item._tab = tab;
item._parent = this;
tab.setText(item.title); tab.setText(item.title);
this._setIcon(item.iconSource, tab, resources, androidApp.packageName); this._setIcon(item.iconSource, tab, resources, androidApp.packageName);
@ -392,7 +408,7 @@ export class TabView extends common.TabView {
} }
} }
private _setIcon(iconSource: string, tab: android.app.ActionBar.Tab, resources: android.content.res.Resources, packageName: string): void { public _setIcon(iconSource: string, tab: android.app.ActionBar.Tab, resources: android.content.res.Resources, packageName: string): void {
if (!iconSource) { if (!iconSource) {
return; return;
} }
@ -438,7 +454,7 @@ export class TabView extends common.TabView {
var i: number = actionBar.getTabCount() - 1; var i: number = actionBar.getTabCount() - 1;
var tab: android.app.ActionBar.Tab; var tab: android.app.ActionBar.Tab;
var index; var index;
for (i; i >= 0; i--) { for (; i >= 0; i--) {
tab = actionBar.getTabAt(i); tab = actionBar.getTabAt(i);
index = this._tabsAddedByMe.indexOf(tab); index = this._tabsAddedByMe.indexOf(tab);
if (index > -1) {// This tab was added by me. if (index > -1) {// This tab was added by me.
@ -449,6 +465,15 @@ export class TabView extends common.TabView {
} }
} }
i = 0;
var length = this.items.length;
var item: TabViewItem;
for (; i < length; i++) {
item = <TabViewItem>this.items[i];
item._tab = null;
item._parent = null;
}
if (this._tabsAddedByMe.length > 0) { if (this._tabsAddedByMe.length > 0) {
throw new Error("TabView did not remove all of its tabs from the ActionBar."); throw new Error("TabView did not remove all of its tabs from the ActionBar.");
} }

View File

@ -73,6 +73,22 @@ class UINavigationControllerDelegateImpl extends NSObject implements UINavigatio
} }
} }
export class TabViewItem extends common.TabViewItem {
public _controller: UIViewController;
public _parent: TabView;
public _update() {
if (this._parent && this._controller) {
var icon = this._parent._getIcon(this.iconSource);
var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((this.title || ""), icon, this._parent.items.indexOf(this));
if (!icon) {
tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
}
this._controller.tabBarItem = tabBarItem;
}
}
}
export class TabView extends common.TabView { export class TabView extends common.TabView {
private _ios: UITabBarControllerImpl; private _ios: UITabBarControllerImpl;
private _delegate: UITabBarControllerDelegateImpl; private _delegate: UITabBarControllerDelegateImpl;
@ -128,9 +144,11 @@ export class TabView extends common.TabView {
var i: number; var i: number;
var length = oldItems.length; var length = oldItems.length;
var oldItem: definition.TabViewItem; var oldItem: TabViewItem;
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
oldItem = oldItems[i]; oldItem = <TabViewItem>oldItems[i];
oldItem._parent = null;
oldItem._controller = null;
this._removeView(oldItem.view); this._removeView(oldItem.view);
} }
@ -143,12 +161,12 @@ export class TabView extends common.TabView {
var i: number; var i: number;
var length = newItems.length; var length = newItems.length;
var item: definition.TabViewItem; var item: TabViewItem;
var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length); var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length);
var newController: UIViewController; var newController: UIViewController;
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
item = newItems[i]; item = <TabViewItem>newItems[i];
this._addView(item.view); this._addView(item.view);
@ -159,12 +177,16 @@ export class TabView extends common.TabView {
newController.view.addSubview(item.view.ios); newController.view.addSubview(item.view.ios);
} }
var icon = this._getIcon(item.iconSource); item._parent = this;
newController.tabBarItem = UITabBarItem.alloc().initWithTitleImageTag(item.title, icon, i); item._controller = newController;
if (!icon) {
newController.tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
}
var icon = this._getIcon(item.iconSource);
var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((item.title || ""), icon, i);
if (!icon) {
tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
}
newController.tabBarItem = tabBarItem;
newControllers.addObject(newController); newControllers.addObject(newController);
} }
@ -175,7 +197,7 @@ export class TabView extends common.TabView {
this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate; this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate;
} }
private _getIcon(iconSource: string): UIImage { public _getIcon(iconSource: string): UIImage {
if (!iconSource) { if (!iconSource) {
return null; return null;
} }