2011-10-23 41 views
0

好的,我将尽量解释这一个尽可能简单!我敢肯定,我忽视了一些简单的事情 - 但一直盯着屏幕太长而无法辨认。一如既往,感谢您的帮助!多个后退按键“禁用”面板按钮

在我的主要活动,我有:

Sub Activity_KeyPress (KeyCode As Int) As Boolean 'handles the back key and the menu key 
    If KeyCode = KeyCodes.KEYCODE_BACK Then 'back keySub Activity_KeyPress (KeyCode As Int) As Boolean       
     Quitandsave 
    End If 
    Return True 
End Sub 

小组 - Quitandsave增加了面板查看到当前活动(主) - 在面板上有两个按钮 - 是戒烟,并没有(改变自己介意并返回到应用程序)。

我在找的是当按下后退键时 - 面板显示正常,并且yes/no按钮正常工作。但是,如果面板从最初的回按键可见,然后再次按下后退键(故意或意外) - yes按钮仍然有效(面板移除,文件保存,应用程序退出) ,但没有按钮不会 - 像它被冻结 - 并且面板不会移除。是因为初始化吗? ... 或者是其他东西?

这里是我的是/否按钮代码:

Sub quitsavebtn1_Click ' yes - quit and save 
    WriteMapSavePage 'calls a sub that writes map to int or external space 
    Activity.Finish ' exit the application 
End Sub 

Sub quitsavebtn2_Click 'no - don't quit and save 
    quitsavepnl.RemoveView 'remove the panel to continue using app 
End Sub 

在我Quitandsave子:

Sub Quitandsave 
    quitsavepnl.Initialize("quitsavepnl") 
    .... code here to set colors,font etc. 
    Activity.AddView(quitsavepnl,15dip,15dip, 50%x, 50%y) 
    .... code here to add buttons to panel etc. 
    quitsavepnl.Visible = True 
End Sub 

回答

1

尝试删除这条线,看看它的工作原理:

quitsavepnl.RemoveView 

点击事件完成后,您可能需要定时器才能删除视图。

+0

通过删除此行,no按钮根本不起作用。 –

+0

它仍然冻结?使用日志来检查事件是否被引发。 – Erel

+0

这是正确的 - 当使用visible = false时,no按钮根本没有响应 - 我在日志中没有看到活动。 yes按钮给我:Activity Main UserClosed = true。当我使用quitsavepnl.RemoveView时,没有按钮的工具(面板消失) - 在日志中看不到任何活动。然后原来的问题仍然存在 - 面板上的另一个后退键在屏幕上呈现不响应按钮。 –

2

RemoveView不会做你认为的事情。它只是将小组从其父母分离。使用Msgbox会更好,但您可以尝试quitsavepnl.Visible = False。

+0

我原本有msgbox,然后对话库 - 与msgbox我想要一个自定义的外观。有了对话库,我没有使用内置的按钮 - 创建了一些按钮 - 但我认为我在B4A主题上阅读 - 您无法捕获单击事件以在对话外执行。总之 - 按照你的建议使用Visible = False给了我相同的结果 - 如果在这个面板可见的情况下(用户可能会意外地)按下后退键,那么no按钮不会执行任何操作,面板依然会显示 - yes按钮正常工作(文件保存/应用程序结束)。如果在面板可见时我没有按下后退键 - 两个按钮都可以正常工作。 –

+0

“您无法捕获单击事件以在对话框外执行”您可以。 CustomDialogs演示显示了这个按钮。 – agraham

0

尝试改变功能quitsavebtn2_Click以下几点:

Sub quitsavebtn2_Click ' no - don't quit and save 
    If quitsavepnl.IsInitialized then 
     quitsavepnl.Visible = false ' remove the panel to continue using app 

    End if 

End Sub 

...和功能QuitandSave以下几点:

Sub QuitandSave 
    If Not(quitsavepnl.IsInitialized) then 
     quitsavepnl.Initialize("quitsavepnl") 
     ' .... code here to set colors,font etc. 

     Activity.AddView(quitsavepnl, 15dip, 15dip, 50%x, 50%y) 
     ' .... code here to add buttons to panel etc. 

    End If 

    If quitsavepnl.IsInitialized then 
     quitsavepnl.Visible = True 

    End If 

End Sub 

是什么让之上,从而effiecient的代码是,它与Java:

  • 面板将一直存在,直到Java的垃圾回收器删除 面板释放内存。
  • 面板将在下次重新创建时 QuitandSave被调用。