Appcelerator - Android Picker不保留选定的值

时间:2016-05-03 21:38:35

标签: appcelerator appcelerator-titanium

请考虑以下代码:

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(我会说的黑客代码),那么它的行为与所需的一样。

任何人都面临这样的问题,或者知道正确的解决方案或根本原因。

2 个答案:

答案 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>

Documentation Link

答案 1 :(得分:1)

我使用Ti.UI.Picker表示日期/时间。在这种情况下,您需要设置value属性以告诉选择器选择了什么值。我想你需要和其他类型的选择器一样,比如:

picker = Titanium.UI.createPicker({
        width : "75%",
        height : "50dip",
        selectionIndicator : true,
        value : '0'
    });

/约翰