PopUpScreen problem

OnClick images. I am displaying a screen with a dropdown code where I need to select data and pass it to the screen where it came from, after selecting data from the dropdown, the popup should disappear the selected ocf value for the first screen. I cannot hide the popup after selection and cannot transfer data back to the first screen

This code will bring up a popup

if (field==bitmapField1) {
     UiApplication.getUiApplication().pushScreen(new MyPopup());
}

      

This is a pop-up screen

public class MyPopup extends PopupScreen {
      ObjectChoiceField ocf;

        public MyPopup() {
             super(new VerticalFieldManager(), Field.FOCUSABLE);
            // 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();
                       Dialog.alert(str);
                  }
           }
     }
}

      

+3


source to share


5 answers


You should add an attribute to your PopUpScreen that refers to the screen that launches PopUp. This way you can send parameters to the parent screen without issue:

public class MyPopup extends PopupScreen {
    ObjectChoiceField ocf;
    MainScreen parentScreen;

    public MyPopup(MainScreen parentScreen) {
            this.parentScreen = parentScreen;
            ...

      



And when you run PopUp:

if(field==bitmapField1){
    UiApplication.getUiApplication().pushScreen(new MyPopup(this));
}

      

+1


source


Here is my CustomChoiceField. Hope this helps:



public class ChoiceField extends HorizontalFieldManager{
    protected boolean isEnabled = true;
    protected String label;
    protected Object[] choices;
    protected int selectedIndex = -1;
    protected ButtonField chooseField;
    protected Font textFont = ClientConstants.Fonts.NORMAL;
    protected PopUpList popup;
    private FieldChangeListener fieldChangeListener;

    public ChoiceField(final String label,Object[] choices){
        this.label = label;
        if (choices == null || choices.length == 0){
            this.choices = new String []{};
            setEnabled(false);
        }else {
            this.choices = choices;
        }
        chooseField = new ButtonField("Please Choose");
        chooseField.setChangeListener(new FieldChangeListener() {
            public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().invokeAndWait(new Runnable() {
                    public void run() {
                        if (isEnabled){
                            UiApplication.getUiApplication().pushScreen(popup);
                        }
                    }
                });
            }
        });
        chooseField.setPadding(0, 0, 0, Display.getWidth() - 20 - chooseField.getPreferredWidth());
        popup = new PopUpList(this.choices);
        add (chooseField);
    }
    public void setChoices(Object[] choices) {
        if (choices == null || choices.length == 0){
            this.choices = new String []{};
            chooseField.setLabel("");
        }else {
            this.choices = choices;
            chooseField.setLabel(this.choices[0].toString());
        }
        popup = new PopUpList(this.choices);
    }
    public void setChangeListener(FieldChangeListener fieldChangeListener){
        this.fieldChangeListener = fieldChangeListener;
    }
    public void setEnabled (boolean isEnabled){
        this.isEnabled = isEnabled;
    }
    public Object getSelectedItem () throws ChoiceFieldNotSelectedException{
        if (selectedIndex == -1){
            throw new ChoiceFieldNotSelectedException(label);
        }
        return choices[selectedIndex];
    }
    public void setSelectedObject(Object selectedObject){
        for(int i=0;i<choices.length;i++)
            if(choices[i].equals(selectedObject)){
                selectedIndex = i;
                break;
            }
        chooseField.setLabel(choices[selectedIndex].toString());
        ChoiceField.this.invalidate();
    }
    protected void paint(Graphics graphics) {
        if (label.length()>0){
            graphics.setColor(Color.WHITE);
            Font f = textFont;
            while (f.getAdvance(label + ": ") > Display.getWidth() - 30 - chooseField.getPreferredWidth()){
                if (f.getHeight() == 8){
                    break;
                }
                f = f.derive(f.getStyle(),f.getHeight()-1);
            }
            graphics.setFont(f);
            graphics.drawText(label + ": ", 10, (chooseField.getHeight() - textFont.getHeight()) / 2);
        }
        super.paint(graphics);
    }
    class PopUpList extends PopupScreen{
        private ObjectListField listField = null;
        public PopUpList(final Object [] choices) {
            super(new VerticalFieldManager(Manager.VERTICAL_SCROLL | Manager.VERTICAL_SCROLLBAR));
            listField = new ObjectListField(choices.length){
                protected void layout(int width, int height) {
                    super.layout(Math.min(width, getPreferredWidth()), height);
                }
                public int getPreferredWidth(ListField list) {
                    int width = 0;
                    for (int i=0;i<choices.length;i++){
                        if (width < textFont.getAdvance(choices[i].toString())){
                            width = textFont.getAdvance(choices[i].toString());
                        }
                    }
                    return width;
                }
            };
            listField.setFont(textFont);
            for (int i=0;i<choices.length;i++){
                listField.insert(i, choices[i]);
            }
            add(listField);
        }
        protected boolean navigationClick(int status, int time) {
            clicked();
            closed();
            return super.navigationClick(status, time);
        }
        protected boolean keyChar(char c, int status, int time) {
            if (c == Characters.ENTER){
                clicked();
                closed();
            }else if (c == Characters.ESCAPE){
                closed();
            }
            return super.keyChar(c, status, time);
        }
        protected void clicked(){
            try{
                selectedIndex = listField.getSelectedIndex();
                chooseField.setLabel(choices[selectedIndex].toString());
                ChoiceField.this.invalidate();
                if (fieldChangeListener != null){
                    fieldChangeListener.fieldChanged(ChoiceField.this, selectedIndex);
                }
            }catch (ArrayIndexOutOfBoundsException e) {
            }
        }
        protected void closed(){
            UiApplication.getUiApplication().invokeAndWait(new Runnable() {
                public void run() {
                    try {
                        UiApplication.getUiApplication().popScreen(PopUpList.this);
                    }catch(Exception e){
                    }
                }
            });
        }
    }
}

      

+1


source


On the PopUp ObjectChoiceField .... method fieldChange () ..... call the onClose () method.

protected boolean onClose(){
uiapplication.getUiapplication.popScreen(this);
return true;
}

      

+1


source


You can use the reverse pattern to solve the problem you are facing. Check Blackberry: select an item in the list, return to the previous screen

0


source


Open dialog in synchronized EventLock

. You will receive your solution ...

synchronized (UiApplication.getUiApplication().getEventLock()) {
    //Open your dialog here......       
    UiApplication.getUiApplication().pushScreen(new MyPopup());
}

      

0


source







All Articles