2016-11-04 2 views
0

Ich habe 2 Fenster geöffnet, ein Haupt; und ein "Popup" -Laden-Fenster, das nur für einige Momente angezeigt werden sollte.Titanium & Alloy - temporäres Fenster schließt ganze App, wenn getötet

Wenn ich versuche zu

loading.close(); 

der Ladebildschirm, erhalten Sie alle Fenster sofort geschlossen. Kein Fehlercode oder irgendetwas, die App schließt gerade auf, da es keine weiteren Ansichten/Fenster mehr auf dem Bildschirm gibt. Aber ich habe nie die Hauptansicht "Index" geschlossen, so dass ich nicht verstehe, warum es verschwindet. Meine Grundidee war es, ein

loading.hide(); 

zu verwenden, um den Ladebildschirm zu verstecken und lassen den Rest fortzusetzen, aber wenn die Haut führt, wird die App nicht Feuer oder auf jeden Fall reagieren, bis die Nähe von Hand gedrückt.


A litte mehr Code:

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 hat keine entsprechenden Code für dieses Problem, oder zumindest denke ich so. Es hat nur ein Fenster und eine Bildansicht mit einem Bild, das sich jede halbe Sekunde ändert, und es funktioniert perfekt, bis es geschlossen ist.

Hinweise:

  • Globale Variable Ti.App.dataReady von einer Hintergrundaufgabe kommt (eine andere Datei, funktioniert einwandfrei);
  • Ereignis onListClick korrekt und Werke gebunden (wenn ich den Laden nicht in erster Linie öffnen)
+1

versuchen Sie, eine Ladeanzeige Overlay zu erstellen? In diesem Fall könnte es sich lohnen, https://github.com/FokkeZB/nl.fokkezb.loading zu betrachten (und vielleicht für Ihren Anwendungsfall zu modifizieren (was bedeutet, dass Bilder jede halbe Sekunde angezeigt werden) – davidcyp

+0

Danke, das Endergebnis ist irgendwie das, was ich suche.Noch, das ist keine Antwort ^^ Ich würde gerne wissen, warum das Schließen des Fensters die App schließt (oder friert es ein. Fürs Erste werde ich das Widget verwenden. Nochmals vielen Dank! – Crystallize

Antwort

1

Versuchen Sie zunächst, index.open nicht zu verwenden, da dies sich auf die "Datei" und nicht auf das eigentliche Fenster bezieht. Stellen Sie sicher, eine ID in der TSS-Datei für das Fenster zu verwenden, und verwenden Sie diese .open(), würde gerne Ihren vollständigen Index-Controller sehen, um genauere Antworten zu geben.

Dann öffnen Sie zwei Fenster gleichzeitig. Wenn du zwei Fenster hintereinander öffnest, wirst du wahrscheinlich eine Wettlaufsituation haben. Wie bereits erwähnt, vergewissern Sie sich, dass das erste Fenster geöffnet ist, bevor Sie ein Overlay-Fenster öffnen.

Ein guter Ratschlag, da Sie Cross-Plattform-Apps hier machen, um die Dinge sicher zu machen (Windows sind für alle Plattformen unterschiedlich, iOS, Android und Windows). Für Android ist das erste Fenster kritisch und wird das Hauptfenster sein. Wenn Ihr Overlay-Fenster auf jeden Fall fertig ist (und ja, einige Dinge sind asynchron), dann ist Ihr Overlay root, schließen Sie es wird Ihre App nach Android-Dokumenten schließen.

SO, stellen Sie immer sicher, dass Ihr erstes Fenster "fertig" ist, bevor Sie etwas anderes öffnen. auf offenes Ereignis warten und dann Overlay öffnen.

Jetzt, wenn Sie möchten, dass es gut aussieht, möchten Sie vielleicht stattdessen das Hauptfenster mit zwei Ansichten in der XML-Datei angeben. Beginnen Sie mit einem "hide" in Ihrem Listenfenster und einer "show" in Ihrem Overlay.Auf diese Weise können Sie jederzeit wechseln. Sie können dann das Overlay "Fortschritt" -Fenster wiederverwenden, wenn Sie möchten.

In meinen Apps verwende ich eine Ansicht in einem Widget, so dass ich kein show/hide verwenden muss, damit ich es auch wiederverwenden kann. Ich denke, es ist eine Geschmacksfrage (es sei denn, wir beginnen Speicherbedarf sprechen)

Hope this für Sie Sinn macht ...

+0

Ja Das Ladefenster ist viel leichter als die Haupt-Seite "index", und da das Laden async ist, wird das Laden zuerst geladen UND root. Durch Schließen des Stammverzeichnisses wird die gesamte App geschlossen, und deshalb ist .close Ich habe eine andere Lösung in einem Kommentar zu meiner Frage gefunden (und für den Moment verwende ich das), aber du hast mir trotzdem eine Erklärung gebracht. Es wird sich sicherlich als nützlich erweisen. – Crystallize

0

Eine Sache, die Sie versuchen können, ist das „offene“ Ereignis zu hören auf dem Hauptfenster zu schießen, bevor du öffnest dein zweites Fenster. Ich hatte ähnliche Verhaltensweisen, wenn ich nicht auf das Öffnen des Fensters warte.

Verwandte Themen