我打开了2个窗口,一个主窗口;和一个“弹出”加载窗口,应该只显示片刻。
当我尝试
时loading.close();
加载屏幕,所有窗口立即关闭。没有错误代码或任何东西,应用程序只是直接关闭,因为屏幕上没有更多的视图/窗口。 但我从未关闭主要的“索引”视图,所以我不明白为什么它会消失。 我的主要想法是使用
loading.hide();
为了隐藏加载屏幕并允许其余部分继续,但是当隐藏执行时,应用程序不会触发或响应任何事件,直到手动强制关闭。
更多代码:
index.js
var loading = Alloy.createController("loading").getView();
function updateMainMenu() {
if (Ti.App.dataReady){
//Actually create the main menù, only if data is available.
//Cut out of snippet due to sheer length.
//When menù is complete, close the loading window.
loading.close(); //##### THIS CLOSES ENTIRE APP #####
}
}
//##### IF LOADING IS HIDDEN INSTEAD, EVENTS NEVER TRIGGER #####
//When a list element is clicked open the corresponding page.
function onListClick(e) {
var win = Alloy.createController('controlPage', e.row.data).getView();
win.open();
}
//Loads the View, displays it and keeps it updated.
$.index.open();
loading.open();
setInterval(updateMainMenu, 2000);
loading.js / tss / xml没有此问题的相关代码,或者至少我是这么认为的。它只有一个窗口和一个imageView,图像每半秒钟变化一次,它完美地工作直到关闭。
注意:
答案 0 :(得分:1)
首先,尽量不要使用index.open,因为这是指“文件”而不是实际窗口。确保在窗口的tss文件中使用id并使用.open(),希望看到完整的索引控制器以提供更准确的答案。
然后你同时打开两个窗口。试图像这样连续打开两个窗口可能会给你一个竞争条件。如上所述,确保在打开任何叠加窗口之前打开第一个窗口。
一个很好的建议,因为你在这里制作跨平台应用程序是为了确保(所有平台,iOS,Android和Windows的窗口都不同)。对于Android,第一个窗口很关键,它将成为根窗口。如果你的覆盖窗口首先完成(有些东西是异步的)那么你的覆盖是root,关闭它将根据Android文档关闭你的应用程序。
因此,在打开任何其他内容之前,请务必确保您的第一个窗口已“完成”。听取开放事件然后打开叠加。
现在,如果您希望它看起来不错,您可能希望在XML文件中指定具有两个视图的主窗口。从列表窗口中的“隐藏”开始,然后在叠加层上显示“显示”。这样你就可以随时转移。然后,您可以根据需要重复使用叠加“进度”窗口。
在我的应用程序中,我使用窗口小部件中的视图,因此我不必使用显示/隐藏,这样我也可以重复使用它。我想这是一个味道问题(除非我们开始谈论内存占用)
希望这对你有意义......
答案 1 :(得分:0)
你可以尝试的一件事就是听#34;打开"在打开第二个窗口之前在主窗口上触发的事件。当我不等窗户打开时,我有类似的奇怪行为。