Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry 如何在弹出式屏幕关闭后调用MainScreen的构造函数_Blackberry - Fatal编程技术网

Blackberry 如何在弹出式屏幕关闭后调用MainScreen的构造函数

Blackberry 如何在弹出式屏幕关闭后调用MainScreen的构造函数,blackberry,Blackberry,我正在调用一个弹出式屏幕,其中有objectchoicefield,从下拉列表中选择一个数据并在静态变量中设置值。我需要在调用popupscreen的主屏幕的构造函数中读取该值 如何做到这一点?我希望在同一屏幕上重新加载我现在选择的数据 最初,当我启动应用程序时,我看到一个带有一些数据的屏幕,一旦我点击一个图像,我就会调用一个弹出屏幕,在那里我选择一些数据,现在我想在弹出屏幕关闭后,用所选值重新加载一个屏幕 Ascreen Public AScreen(){ String timezon

我正在调用一个弹出式屏幕,其中有objectchoicefield,从下拉列表中选择一个数据并在静态变量中设置值。我需要在调用popupscreen的主屏幕的构造函数中读取该值

如何做到这一点?我希望在同一屏幕上重新加载我现在选择的数据

最初,当我启动应用程序时,我看到一个带有一些数据的屏幕,一旦我点击一个图像,我就会调用一个弹出屏幕,在那里我选择一些数据,现在我想在弹出屏幕关闭后,用所选值重新加载一个屏幕

Ascreen

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();
            }
    
        }
    
    }