2016-05-03 2 views
0

Рассмотрим следующий код ниже:Appcelerator - Android Picker не сохраняя выбранное значение

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

Я создал JIRA для этого, в случае, любой человек заинтересован и хотел бы, чтобы его посмотреть. https://jira.appcelerator.org/browse/AC-3592 – Soumya

ответ

3

Я думаю, что это ожидается поведение. Сборщик прикреплен к окну и на Android, начиная с версии 3.2.0, все окна имеют супертяжелый вес. Окно с тяжелым весом связано с новой деятельностью Android. Поэтому, когда окно закрыто, активность закрывается, и это будет сборщик. В этом случае сборщик не должен сохранять выбранное значение. В этом случае вы можете попробовать использовать легкое окно.

Перед выпуском Titanium 3.2.0 в Android, Титановые окна могут быть тяжеловесом или легкий:

  • тяжеловес окно ассоциируется с новым Android Activity.

  • Легкое окно представляет собой полноэкранный режим и работает в текущей активности Android.

Если вы все еще хотите старое поведение, вы можете включить свойство ti.android.useLegacyWindow в tiapp.xml:

<property name="ti.android.useLegacyWindow" type="bool">true</property> 

Documentation Link

+0

Как и в случае с JIRA, это похоже на правильное поведение. Разработчику необходимо вручную вернуть прежнее выбранное значение, чтобы отразить изменение. Следовательно, отмечая это как ответ, хотя свойство legacyWindow для этого не требуется. – Soumya

1

я использую Ti.UI.Picker для даты/времени , И в этом случае вам нужно установить свойство value, чтобы сообщить собеседнику, какое значение выбрано. Я думаю, что вам нужно то же самое с другими типами сборщика, как:

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

/John