请考虑以下代码:
function doClick(e) {
win.open();
}
var picker = null;
var backBtn = null;
var selectedIdx = 0;
$.index.open();
var win = Titanium.UI.createWindow({
exitOnClose : false,
navBarHidden : true
});
win.addEventListener("open", function() {
if(null != picker) {
//picker.setSelectedRow(0, selectedIdx, false);
return;
}
picker = Titanium.UI.createPicker({
width : "75%",
height : "50dip",
selectionIndicator : true
});
picker.addEventListener("change", function(id) {
selectedIdx = id.rowIndex;
});
var arr = [];
for(var i = 0; i < 10; i++) {
arr.push(Titanium.UI.createPickerRow({
title : i,
color : "black"
}));
}
selectedIdx = 0;
picker.add(arr);
backBtn = Titanium.UI.createButton({
bottom : "10dip",
title : "Close"
});
backBtn.addEventListener("click", function() {
win.close();
});
win.add(picker);
win.add(backBtn);
});
如果上面的代码是使用SDK 5.2.0.GA或5.2.2.GA执行的,那么您将看到未保留选择器值。在打开/关闭窗口后,即使我们重用旧的选择器对象。但是,如果您取消注释setSelectedRow(我会说的黑客代码),那么它的行为与所需的一样。
任何人都面临这样的问题,或者知道正确的解决方案或根本原因。
答案 0 :(得分:3)
我认为这是预期的行为。选择器连接到一个窗口,在Android版本3.2.0开始,所有窗口都是重量级的。重量级窗口与新的Android活动相关联。因此,当窗口关闭时,活动将被关闭,因此选择器将被关闭。在这种情况下,选择器不应该保留其选定的值。在这种情况下,您可以尝试使用轻量级窗口。
在Android中发布Titanium 3.2.0之前,Titanium windows可以是重量级或轻量级的:
重量级窗口与新的Android活动相关联。
轻量级窗口是全屏视图,可在当前的Android活动中运行。
如果您仍想要旧的行为,可以在tiapp.xml中启用ti.android.useLegacyWindow属性:
<property name="ti.android.useLegacyWindow" type="bool">true</property>
答案 1 :(得分:1)
我使用Ti.UI.Picker
表示日期/时间。在这种情况下,您需要设置value
属性以告诉选择器选择了什么值。我想你需要和其他类型的选择器一样,比如:
picker = Titanium.UI.createPicker({
width : "75%",
height : "50dip",
selectionIndicator : true,
value : '0'
});
/约翰