Search code examples
javascriptandroidtitaniumtitanium-mobileappcelerator

Multiple alert dialog on Android app


I'm developing a cross platform application using Appcelerator Titanium. I'm going to fire logout method when user clicks Android back button, in the next windows after login window. Everything works, but the second time I tried to login and then logout alert dialog shows up two time. Hope someone will help. Giacomo.

var win = Titanium.UI.currentWindow;
var msg = Titanium.UI.createLabel({
    text:"Mail: " + win.email + "\nNome: " + win.name,
    top:10,
    left:10,
    width:300,
    height:'auto'
});
win.add(msg);
//definisco una finestra di dialogo per informare l'utente sul logout
var dialog = Ti.UI.createAlertDialog({
    buttonNames: ['Si', 'No'],
    message: 'Vuoi effettuare il logout?',
    title: 'Attenzione'
});
//intercetto il tasto indietro di android e gestisco il Logout
var listener = win.addEventListener('android:back',function(e){ 
//aggiungo un event listener alla finestra di dialogo intercettando il tasto si o no
dialog.show();
dialog.addEventListener('click', function(e){
    if (e.index == 1){
        //è stato cliccato il tasto NO, quindi nessuna azione
    }else if(e.index == 0){
        //è stato cliccato il tasto Si, quindi effettuo il logout, cancello la variabile di sessione ...
        win.close();
        win.remove(msg);
        win.remove(dialog);
    }
}); 
});

Solution

  • I have pulled your answer out of the question and posted it here. This will allow future users to more easily see your solution.


    The solution end up being this code

    var handlerBack = function (e){ 
    //aggiungo un event listener alla finestra di dialogo intercettando il tasto si o no
    dialog.show();
    dialog.addEventListener('click', function(e){
        if (e.index == 1){
            //è stato cliccato il tasto NO, quindi nessuna azione
        }else if(e.index == 0){
            //è stato cliccato il tasto Si, quindi effettuo il logout, cancello la variabile di sessione ...
            win.close();
            win.remove(msg);
            win.remove(dialog);
            win.removeEventListener('android:back', handlerBack);
        }
    }); 
    };
    win.addEventListener('android:back', handlerBack);