Blackberry 如何在弹出式屏幕关闭后调用MainScreen的构造函数
我正在调用一个弹出式屏幕,其中有objectchoicefield,从下拉列表中选择一个数据并在静态变量中设置值。我需要在调用popupscreen的主屏幕的构造函数中读取该值 如何做到这一点?我希望在同一屏幕上重新加载我现在选择的数据 最初,当我启动应用程序时,我看到一个带有一些数据的屏幕,一旦我点击一个图像,我就会调用一个弹出屏幕,在那里我选择一些数据,现在我想在弹出屏幕关闭后,用所选值重新加载一个屏幕 AscreenBlackberry 如何在弹出式屏幕关闭后调用MainScreen的构造函数,blackberry,Blackberry,我正在调用一个弹出式屏幕,其中有objectchoicefield,从下拉列表中选择一个数据并在静态变量中设置值。我需要在调用popupscreen的主屏幕的构造函数中读取该值 如何做到这一点?我希望在同一屏幕上重新加载我现在选择的数据 最初,当我启动应用程序时,我看到一个带有一些数据的屏幕,一旦我点击一个图像,我就会调用一个弹出屏幕,在那里我选择一些数据,现在我想在弹出屏幕关闭后,用所选值重新加载一个屏幕 Ascreen Public AScreen(){ String timezon
Public AScreen(){
String timezone_static = MyPopup.ocfDATA;
}
if (field == bitmapField1) {
UiApplication.getUiApplication().pushScreen(new MyPopup(screen));
}
public class MyPopup extends PopupScreen {
ObjectChoiceField ocf;
NativeScreen deligate = null;
public static String ocfDATA;
public MyPopup(final NativeScreen deligate) {
super(new VerticalFieldManager(), Field.FOCUSABLE);
this.deligate = deligate;
// this listener 'listens' for any event (see at the bottom)
FieldListener listener = new FieldListener();
TimeZone[] zone = TimeZoneUtilities.getAvailableTimeZones();
ocf = new ObjectChoiceField("Set Timezone", zone);
ocf.setChangeListener(listener);
add(ocf);
}
class FieldListener implements FieldChangeListener {
public void fieldChanged(Field f, int context) {
if (f == ocf) {
Object ob = ocf.getChoice(ocf.getSelectedIndex());
String str = ob.toString();
ocfDATA = str;
deligate.valueChanged(str);
Dialog.alert(str);
close();
}
}
}
我正在解释一些如何使用值从一个屏幕导航到另一个屏幕的流程。 这是主屏幕中的一种简单方法
protected void onExposed() {
String timezone_static = MyPopup.ocfDATA;
}
否则,您想了解更多信息,从一个地方导航到另一个地方,只需了解以下代码即可
package mypackage;
import java.util.TimeZone;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.util.TimeZoneUtilities;
public final class MyScreen extends MainScreen implements FieldChangeListener
{
private ButtonField btn;
private LabelField zone_name;
public MyScreen()
{
//may be you have lots of parameters in constructers those all are in live state only design values you can delete
CreateGui("Default Zone");// add all your design in this function
}
public void CreateGui(String selcetd_time_zone)
{
setTitle(selcetd_time_zone);
zone_name=new LabelField(selcetd_time_zone, Field.FOCUSABLE);
btn=new ButtonField("select timezone",Field.FOCUSABLE);
btn.setChangeListener(this);
add(btn);
add(zone_name);
}
public void ReloadScreenAccordingToNewZone(String zone_name)
{
synchronized (UiApplication.getEventLock()) {
deleteAll();//clean your GUI
invalidate();
CreateGui(zone_name);
}
}
public void fieldChanged(Field field, int context) {
if(field==btn)
{
UiApplication.getUiApplication().pushScreen(new MyPopup(MyScreen.this));
}
}
}
class MyPopup extends PopupScreen implements FieldChangeListener{
ObjectChoiceField ocf;
MyScreen deligate = null;
public MyPopup(MyScreen deligate) {
super(new VerticalFieldManager(), Field.FOCUSABLE);
this.deligate = deligate;
TimeZone[] zone = TimeZoneUtilities.getAvailableTimeZones();
ocf = new ObjectChoiceField("Set Timezone", zone);
ocf.setChangeListener(this);
add(ocf);
}
public void fieldChanged(Field field, int context) {
if(field==ocf)
{
Object ob = ocf.getChoice(ocf.getSelectedIndex());
deligate.ReloadScreenAccordingToNewZone(ob.toString());
close();
}
}
}
我的建议是,如果您想从另一个类更新更多的设计,那么只需分离构造函数和设计
像
所有设计都在一个方法中编写,假设CreateGui();从构造函数调用此方法;
如果您想重新加载更新设计,只需从OneExposed()方法调用CreateGui即可下面是您的屏幕
PopupScreen
时,将调用onExposed()
主屏幕的方法
如果您将String
从PopupScreen
传递到主屏幕,则必须在PopupScreen中获取一个静态变量并设置其值。当您关闭PopupScreen时,将调用主屏幕的方法。您必须像在
onExposed()方法中那样以静态方式访问它。
String getStringfromPopup=PopupScreen.yourStaticString`
希望它能帮助
package mypackage;
import java.util.TimeZone;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.util.TimeZoneUtilities;
public final class MyScreen extends MainScreen implements FieldChangeListener
{
private ButtonField btn;
private LabelField zone_name;
public MyScreen()
{
//may be you have lots of parameters in constructers those all are in live state only design values you can delete
CreateGui("Default Zone");// add all your design in this function
}
public void CreateGui(String selcetd_time_zone)
{
setTitle(selcetd_time_zone);
zone_name=new LabelField(selcetd_time_zone, Field.FOCUSABLE);
btn=new ButtonField("select timezone",Field.FOCUSABLE);
btn.setChangeListener(this);
add(btn);
add(zone_name);
}
public void ReloadScreenAccordingToNewZone(String zone_name)
{
synchronized (UiApplication.getEventLock()) {
deleteAll();//clean your GUI
invalidate();
CreateGui(zone_name);
}
}
public void fieldChanged(Field field, int context) {
if(field==btn)
{
UiApplication.getUiApplication().pushScreen(new MyPopup(MyScreen.this));
}
}
}
class MyPopup extends PopupScreen implements FieldChangeListener{
ObjectChoiceField ocf;
MyScreen deligate = null;
public MyPopup(MyScreen deligate) {
super(new VerticalFieldManager(), Field.FOCUSABLE);
this.deligate = deligate;
TimeZone[] zone = TimeZoneUtilities.getAvailableTimeZones();
ocf = new ObjectChoiceField("Set Timezone", zone);
ocf.setChangeListener(this);
add(ocf);
}
public void fieldChanged(Field field, int context) {
if(field==ocf)
{
Object ob = ocf.getChoice(ocf.getSelectedIndex());
deligate.ReloadScreenAccordingToNewZone(ob.toString());
close();
}
}
}