Skip to content

Commit 388f709

Browse files
committed
Fixed: Setting the ListPicker.selectedIndex on pageLoaded selects the correct item but it is not rendered.
1 parent 6d77629 commit 388f709

File tree

7 files changed

+99
-2
lines changed

7 files changed

+99
-2
lines changed

CrossPlatformModules.csproj

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@
6060
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
6161
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
6262
<ItemGroup>
63+
<TypeScriptCompile Include="apps\pickers-demo\app.ts" />
64+
<TypeScriptCompile Include="apps\pickers-demo\main-page.ts">
65+
<DependentUpon>main-page.xml</DependentUpon>
66+
</TypeScriptCompile>
67+
<TypeScriptCompile Include="apps\pickers-demo\model.ts" />
6368
<TypeScriptCompile Include="apps\gallery-app\app.ts" />
6469
<TypeScriptCompile Include="apps\gallery-app\main-page.ts">
6570
<DependentUpon>main-page.xml</DependentUpon>
@@ -493,6 +498,9 @@
493498
<TypeScriptCompile Include="libjs.d.ts" />
494499
</ItemGroup>
495500
<ItemGroup>
501+
<Content Include="apps\pickers-demo\main-page.xml">
502+
<SubType>Designer</SubType>
503+
</Content>
496504
<Content Include="apps\gallery-app\layouts\dock-layout.xml" />
497505
<Content Include="apps\template-settings\app.css" />
498506
<Content Include="apps\tests\app\binding_tests.xml" />
@@ -1381,6 +1389,7 @@
13811389
<Content Include="CreateNewModule.md" />
13821390
<Content Include="DebugV8Heap.md" />
13831391
<Content Include="apps\TelerikNEXT\package.json" />
1392+
<Content Include="apps\pickers-demo\package.json" />
13841393
<None Include="js-libs\esprima\LICENSE.BSD" />
13851394
<Content Include="source-control.md" />
13861395
<Content Include="ui\segmented-bar\package.json">
@@ -1458,7 +1467,7 @@
14581467
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
14591468
</WebProjectProperties>
14601469
</FlavorProperties>
1461-
<UserProperties ui_2scroll-view_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2editable-text-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2absolute-layout-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2gallery-app_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2content-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2web-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2linear-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2absolute-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2dock-layout_2package_1json__JSONSchema="" ui_2layouts_2grid-layout_2package_1json__JSONSchema="" ui_2layouts_2wrap-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" />
1470+
<UserProperties ui_2layouts_2wrap-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2grid-layout_2package_1json__JSONSchema="" ui_2layouts_2dock-layout_2package_1json__JSONSchema="" ui_2layouts_2absolute-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2linear-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2web-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2content-view_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2gallery-app_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2absolute-layout-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2editable-text-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2scroll-view_2package_1json__JSONSchema="http://json.schemastore.org/package" />
14621471
</VisualStudio>
14631472
</ProjectExtensions>
1464-
</Project>
1473+
</Project>

apps/pickers-demo/app.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import application = require("application");
2+
application.mainModule = "app/main-page";
3+
application.start();

apps/pickers-demo/main-page.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import observableModule = require("data/observable");
2+
import pagesModule = require("ui/page");
3+
import model = require("./model");
4+
import enums = require("ui/enums");
5+
import labelModule = require("ui/label");
6+
import listPickerModule = require("ui/list-picker");
7+
import datePickerModule = require("ui/date-picker");
8+
import timePickerModule = require("ui/time-picker");
9+
10+
var viewModel: model.WebViewModel;
11+
var page: pagesModule.Page;
12+
var label: labelModule.Label;
13+
var listPicker: listPickerModule.ListPicker;
14+
var datePicker: datePickerModule.DatePicker;
15+
var timePicker: timePickerModule.TimePicker;
16+
17+
export function onPageLoaded(args: observableModule.EventData) {
18+
viewModel = new model.WebViewModel();
19+
page = <pagesModule.Page>args.object;
20+
page.bindingContext = viewModel;
21+
22+
viewModel.items = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
23+
viewModel.selectedIndex = 5;
24+
25+
label = page.getViewById<labelModule.Label>("label");
26+
listPicker = page.getViewById<listPickerModule.ListPicker>("listPicker");
27+
datePicker = page.getViewById<datePickerModule.DatePicker>("datePicker");
28+
timePicker = page.getViewById<timePickerModule.TimePicker>("timePicker");
29+
}
30+
31+
export function onTap(args: observableModule.EventData) {
32+
console.log("onTap");
33+
viewModel.items = ["Male", "Female"];
34+
}

apps/pickers-demo/main-page.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<Page loaded="onPageLoaded">
2+
<StackLayout id="stack">
3+
<Button id="button" text="GO!" height="50" width="100" tap="onTap"/>
4+
<Label id="label" text="{{ selectedIndex }}" height="50" width="100" />
5+
<ListPicker id="listPicker" selectedIndex="{{ selectedIndex }}" items="{{ items }}"/>
6+
<DatePicker id="datePicker"/>
7+
<TimePicker id="timePicker"/>
8+
</StackLayout>
9+
</Page>

apps/pickers-demo/model.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import observable = require("data/observable");
2+
3+
export class WebViewModel extends observable.Observable {
4+
constructor() {
5+
super();
6+
}
7+
8+
private _selectedIndex: number;
9+
get selectedIndex(): number {
10+
return this._selectedIndex;
11+
}
12+
set selectedIndex(value: number) {
13+
console.log("selectedIndex:" + value);
14+
this._selectedIndex = value;
15+
this.notify({ object: this, eventName: observable.knownEvents.propertyChange, propertyName: "selectedIndex", value: value });
16+
}
17+
18+
private _items: Array<string>
19+
get items(): Array<string> {
20+
return this._items;
21+
}
22+
set items(value: Array<string>) {
23+
console.log("items:" + value);
24+
this._items = value;
25+
this.notify({ object: this, eventName: observable.knownEvents.propertyChange, propertyName: "items", value: value });
26+
}
27+
}

apps/pickers-demo/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "name" : "pickers-demo",
2+
"main" : "app.js" }

ui/list-picker/list-picker.android.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export class ListPicker extends common.ListPicker {
5656
},
5757

5858
format: function (index: number) {
59+
console.log("format(" + index + ")");
5960
if (this.owner) {
6061
return this.owner._getItemAsString(index);
6162
}
@@ -70,10 +71,22 @@ export class ListPicker extends common.ListPicker {
7071
},
7172

7273
onValueChange: function (picker: android.widget.NumberPicker, oldVal: number, newVal: number) {
74+
console.log("onValueChange("+oldVal+", "+newVal+")");
7375
if (this.owner) {
7476
this.owner._onPropertyChangedFromNative(common.ListPicker.selectedIndexProperty, newVal);
7577
}
7678
}
7779
}));
80+
81+
this._fixDisappearingSelectedItem();
82+
}
83+
84+
private _fixDisappearingSelectedItem() {
85+
//HACK: http://stackoverflow.com/questions/17708325/android-numberpicker-with-formatter-does-not-format-on-first-rendering/26797732
86+
//dgel's solution doesn't work for me: when I tap on the picker, formatting disappears again.This bug is caused by input filter set on EditText inside NumberPicker when setDisplayValues isn't used. So I came up with this workaround:
87+
var mInputTextField = java.lang.Class.forName("android.widget.NumberPicker").getDeclaredField("mInputText");
88+
mInputTextField.setAccessible(true);
89+
var mInputText = <android.widget.EditText>mInputTextField.get(this._android);
90+
mInputText.setFilters([]);
7891
}
7992
}

0 commit comments

Comments
 (0)