Titanium:陷阱android后退按钮

时间:2013-11-30 07:22:13

标签: titanium

我想在退出应用程序之前捕获android后退按钮以强制确认。我的应用程序是一个双窗口/两个选项卡应用程序,基于钛cli创建的骨架。我已尝试过以下三种方法。据我所知,后退按钮永远不会被困住,当按下后退按钮时应用程序就会关闭。

Titanium 3.2.0 CLI OS X 10.9

  // below true of all windows:
  // modal: true,
  // exitOnClose:true
  // android:back and androidback have been tried

Ti.App.addEventListener('androidback', function(e){
    var confirmClear = Titanium.UI.createAlertDialog({


        message:'Exit App?', 
        buttonNames: ['Yes','No']
    });
    confirmClear.show();
    confirmClear.addEventListener('click',function(e) {
        if (e.index === 0) {

         win1.close();

          }
    });
});

//////////////////////////////////////////////////  

win1.addEventListener('androidback', function(e){
    var confirmClear = Titanium.UI.createAlertDialog({


        message:'Exit App?', 
        buttonNames: ['Yes','No']
    });
    confirmClear.show();
    confirmClear.addEventListener('click',function(e) {
        if (e.index === 0) {

         win1.close();

          }
    });
});

//////////////////////////////////////////////////  

win2.addEventListener('androidback', function(e){
    var confirmClear = Titanium.UI.createAlertDialog({

        message:'Exit App?', 
        buttonNames: ['Yes','No']
    });

    confirmClear.show();

    confirmClear.addEventListener('click',function(e) {
        if (e.index === 0) {

         win2.close();

          }
    });
});

阅读完建议后,请点击我现在正在使用的代码:

tabGroup.addEventListener('androidback', function(e){
    var confirmClear = Titanium.UI.createAlertDialog({


        message:'Exit App?', 
        buttonNames: ['Yes','No']
    });
    confirmClear.show();
    confirmClear.addEventListener('click',function(e) {
        if (e.index === 0) {

         tabGroup.close();


          }
    });
});

3 个答案:

答案 0 :(得分:2)

首先,我总是使用android:back

当您使用tabGroups方法时,您应该知道这些选项卡链接到软窗口(win1win2),这可能就是为什么它们没有捕获android:back事件。 说,你应该在tabGroup(ApplicationTabGroup.js)中捕获这个事件。在那里你应该添加这样的东西:

function ApplicationTabGroup(Window) {
    //create module instance
    var self = Ti.UI.createTabGroup();
...

    self.addEventListener('android:back', function(e){
        var confirmClear = Titanium.UI.createAlertDialog({
            message:'Exit App?', 
            buttonNames: ['Yes','No']
        });
        confirmClear.show();
        confirmClear.addEventListener('click',function(e) {
            if (e.index === 0) {
                win1.close(); //this line won't work
                //$.index.activeTab = 1; //use this to switch to tab2

            }
        });
    });
    return self;    
}

另一方面,如果您尝试切换到另一个标签页,则应尝试使用self.activeTab = 1;而不是win1.close();win1.close();如果它是标签(win1.containingTab = tab1;)的一部分,则无效。如果您要删除标签,则在Android中,方法removeTab也不会有效。

答案 1 :(得分:0)

你应该只为win1使用exitOnClose事件。

还告诉我你用的是哪个钛问?

答案 2 :(得分:0)

尝试使用“android:back”代替。