我想在BlackBerry中使用UiApplication.activate()
方法。在Android中,我们使用onResume()
方法;那么我们如何在BlackBerry中使用UiApplication.activate()
方法?
没有太多可用的信息。
答案 0 :(得分:4)
由于Peter的回答下面的评论,很难回答这个问题。 Android中的Activity#onResume()通常不会简单地用于“刷新...在进行更改后当场的UI数据”。
onResume()
时,Android操作系统会调用<{Activity
;这通常在离开之后发生...要么是因为另一个活动显示在它前面,要么是因为用户离开了你的应用程序并回到它(回家和回来,回到电话和回来等)
在BlackBerry中,当用户返回应用时,系统会调用Application#activate()
。此回调发生在应用级别。 Android中的应用程序由许多活动(通常)组成。为您的应用中的每个活动分别调用onResume()
,因为用户返回该个人活动。
虽然不完全相同,但BlackBerry中的类似构造是Screen
类。一个应用可能有很多屏幕,因为Android应用程序有很多活动。所以,如果你正在寻找与onResume()
最相似的东西,我会尝试,as Peter suggested:
要最接近onResume()
,您可能需要同时使用这两种方法,因为Screen#onExposed()
不会被称为显示Screen
的第一次时间(虽然Activity#onResume()
确实如此)。您可以在扩展Screen
(或MainScreen
等)的类中覆盖这些方法。
如果您的问题只是确定何时刷新用户界面,则需要详细说明您正在使用哪种UI对象(字段),何时获取新数据显示。
以下是一些示例代码,说明如何构建主Screen
类,以尝试模仿Android的onResume()
回调:
public final class MyScreen extends MainScreen {
public MyScreen() {
setTitle("MyTitle");
}
protected void onExposed() {
super.onExposed();
onResume();
}
protected void onUiEngineAttached(boolean attached) {
super.onUiEngineAttached(attached);
if (attached) {
onResume();
}
}
private void onResume() {
// TODO: put your Android-like processing here
System.out.println("onResume()");
}
}
答案 1 :(得分:3)
关于activate()没有什么可以了解的。如果你看一下文档
http://www.blackberry.com/developers/docs/7.1.0api/net/rim/device/api/system/Application.html
它说: “当系统将此应用程序带到前台时,系统会调用此方法。”因此,如果您的应用程序已被推送到后台(例如,通过电话呼叫),然后用户单击您的图标以再次查看您的应用程序,则将调用activate()。相反,当系统将您的应用程序推送到后台时(例如,收到电话时),将调用deactivate()。
请注意,首次启动应用程序时也会调用activate()。
问题实际上是你在onResume()中做了什么,你需要在BlackBerry代码中复制。如果您能告诉我们这一点,我们或许可以建议实现您想要的结果的最佳方式。
<强>更新强>
鉴于您似乎正在使用onResume()来更新Ui,遗憾的是,没有一种简单的方法可以为整个应用程序执行此操作。您实际使用的方法实际上取决于要更新的内容。
但请注意,更改内容时,大多数字段都会自动更新。举一个简单的例子,如果你有一个包含数据的EditField,你就使用了 .setText(“新数据”); 方法,这将自动在屏幕上重新绘制该字段。
我希望您有一个从数据库或数据源填充的屏幕,而在您要刷新此数据的activate()中。因此,您必须浏览每个屏幕的字段并使用关联的set ...方法来更新内容。
这有点问题,因为为应用程序而不是屏幕调用了activate,并且您可能在堆栈上有多个屏幕,并且您确实需要更新所有这些屏幕有多种方法可以执行此操作,包括说,您的屏幕注册自己要更新,或者您的activate()方法在显示堆栈中搜索那里的屏幕。
但可能一个简单的方法是使用每个屏幕的'onExposed()'方法来自动更新内容。在屏幕被隐藏然后显示的任何时候都会调用此方法,这正是应用程序被预设后会发生的情况。当屏幕被另一个被推到屏幕上的屏幕隐藏时,甚至用户按下菜单键也会发生这种情况。因此,如果更新耗时(例如需要数据库查找),您可能不希望每次调用onExposed()时都更新,而是尝试限制更新频率。
这种'onExposed()'方法并没有单独更新每个Field的内容,但它可能更容易实现。
进一步更新
注意Nate的回答,Nate有Android和BB的经验,因此可以更好地解决您的问题。
但是如果您知道屏幕已经更新,那么您刚刚处理了与屏幕内容相关的网络请求,那么您应该单独浏览每个字段,“设置”当时更新的值,不要担心使用onExposed()。一种适用于此的设计方法是将屏幕构造与屏幕填充分开,因此您可以从多个位置调用“填充”(请注意,在更新字段时确实需要在事件线程上)。
但是在这种情况下,您可能会发现创建新屏幕并推送它并弹出旧屏幕(具有旧值)更容易,更快捷。