1
我想在BlackBerry应用程序中从一个屏幕切换到另一个屏幕 - 从类别屏幕切换到详细屏幕。我不知道如何从一个屏幕切换到另一个屏幕。在BlackBerry上从一个屏幕切换到另一个屏幕
我想在BlackBerry应用程序中从一个屏幕切换到另一个屏幕 - 从类别屏幕切换到详细屏幕。我不知道如何从一个屏幕切换到另一个屏幕。在BlackBerry上从一个屏幕切换到另一个屏幕
如果您处于事件线程(您的程序运行的默认线程,如果它是UI应用程序并且您还没有启动任何其他线程),则可以通过调用pushScreen()来打开另一个屏幕。方法UiApplication类。
因为在一般情况下,你的应用程序的UIApplication派生,你会采取引用您的应用程序对象,并调用pushScreen()它与你的新屏幕的参数:
myApp.pushScreen(new MyNewScreen());
如果您正在工作线程中运行,或者在您无法访问UiApplication的任何上下文中运行,或者不允许推送屏幕(您只能在原始UI上使用UI组件线程),然后将屏幕推入屏幕堆栈有点不同 - 您需要切换到UI线程,然后按下新屏幕到屏幕堆栈:
Application.getApplication().invokeLater(
new Runnable() {
public void run() {
Ui.getUiEngine().pushScreen(new MyNewScreen());
}
}
);
在Antair,我们有一个简单换网类,就是我们使用我们所有的项目的更大的内部库的一部分。以下是您可以使用的精简版ScreenChanger类。
// -----------------------------------------------------------------------------
//
// Antair Library for BlackBerry Devices
// ScreenChanger.java
//
// -----------------------------------------------------------------------------
package com.antair.blackberrylib.ui;
import net.rim.device.api.system.Application;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.Ui;
interface ScreenChangerListener
{
void onScreenChangeComplete(Screen openedScreen, Screen closedScreen);
}
final class ScreenChanger
{
static void change (Screen screenToOpen, ScreenChangerListener listener)
{
ScreenChanger.change(screenToOpen, null, listener);
}
static void change (Screen screenToOpen, Screen screenToClose,
ScreenChangerListener listener)
{
Application.getApplication().invokeLater(
new EventThreadScreenChanger(screenToOpen, screenToClose, listener));
}
static void close (Screen screenToClose, ScreenChangerListener listener)
{
Application.getApplication().invokeLater(
new EventThreadScreenChanger(null, screenToClose, listener));
}
}
final class EventThreadScreenChanger extends Thread
{
Screen _screenToOpen;
Screen _screenToClose;
ScreenChangerListener _listener;
EventThreadScreenChanger (Screen screenToOpen, Screen screenToClose,
ScreenChangerListener listener)
{
_screenToOpen = screenToOpen;
_screenToClose = screenToClose;
_listener = listener;
}
public void run()
{
if (_screenToOpen != null)
{
try
{
Ui.getUiEngine().pushScreen(_screenToOpen);
}
catch (Exception e)
{
// Your error handler
}
}
if (_screenToClose != null)
{
try
{
Ui.getUiEngine().popScreen(_screenToClose);
}
catch (Exception e)
{
// Your error handler
}
}
if (_listener != null)
{
_listener.onScreenChangeComplete(_screenToOpen, _screenToClose);
}
}
}