从Popup Screen获取字段值返回Blackberry中的主屏幕

时间:2011-10-21 07:15:47

标签: blackberry

现在我有一个从包含按钮的MainScreen扩展的自选画面。单击该按钮时,它将显示包含RadioButtonFields列表的PopupScreen,OK和Cancel按钮。我的问题是如何将PopupScreen的RadioButtonField值恢复为MyScreen。

请在这种情况下帮助我。

由于


以下是我的代码

MyScreen.java

public class MyScreen extends MainScreen{
    private int currentValue = 0;
    public MyScreen() {
        LabelField lblField = new LabelField();
        lblField.setText("Current Value = " + currentValue);

        ButtonField btnPopup = new ButtonField("Show Popup");
        btnPopup.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().pushScreen(new MyPopupScreen());
            }
        });

        add(lblField);
        add(btnPopup);

    }
}

MyPopupScreen

public class MyPopupScreen extends PopupScreen implements FieldChangeListener {
    private int currentValue = -1;

    public MyPopupScreen() {
        super(new VerticalFieldManager(VerticalFieldManager.VERTICAL_SCROLL|VerticalFieldManager.VERTICAL_SCROLLBAR), Field.FOCUSABLE 

                );
        add(new LabelField("Select Chart Type"));

        RadioButtonGroup radioGroup = new RadioButtonGroup();
        for (int i = 0; i < 10; i++) {
            RadioButtonField radio = new RadioButtonField("Option no. " + i, radioGroup, false);
            radio.setChangeListener(this);
            add(radio);
        }

        ButtonField cancelBtn = new ButtonField("Close");
        ButtonField okBtn = new ButtonField("OK");
        add(okBtn);
        add(cancelBtn);

        cancelBtn.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().popScreen();
            }
        });
        okBtn.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                //How to get radio value or index value to pass back to MyScreen
            }
        });
    }

    public void fieldChanged(Field field, int context) {
        if (field instanceof RadioButtonField) {
            RadioButtonField radio = (RadioButtonField) field;
            currentValue = radio.getIndex();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

正如Vijay所说,这是我们使用内部类实现这一目标的一种方式。另一种方法可以是,使用设计观察者设计模式。

尝试了解以下代码,并使用对您有效的代码。

<强> MyScreen.java

public class MyScreen extends MainScreen implements MyListener {

    MyScreen screen = null;

    public MyScreen() {
        screen = this;

        LabelField lblField = new LabelField();
        lblField.setText("Current Value = " + currentValue);

        ButtonField btnPopup = new ButtonField("Show Popup");
        btnPopup.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().pushScreen(new MyPopupScreen(screen));
            }
        });

        add(lblField);
        add(btnPopup);

    }


    public void valueChanged(int selectedIdx) {
        Dialog.alert(selectedIdx );
    }
}

<强> MyListener.java

public interface MyListener {
    public void valueChanged(int selectedIdx);
}

<强> MyPopupScreen.java

public class MyPopupScreen extends PopupScreen implements FieldChangeListener {
    MyScreen deligate = null;


    public MyPopupScreen(final MyScreen deligate) {

        super(new VerticalFieldManager(VerticalFieldManager.VERTICAL_SCROLL|VerticalFieldManager.VERTICAL_SCROLLBAR), Field.FOCUSABLE);
        this.deligate = deligate;
        add(new LabelField("Select Type"));


        ButtonField closeBtn = new ButtonField("Close");
        ButtonField okBtn = new ButtonField("OK");
        add(okBtn);
        add(closeBtn);

        closeBtn.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());
            }
        });
        okBtn.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                deligate.valueChanged(radioGroup.getSelectedIndex());
                UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());


            }
        });
    }


}

答案 1 :(得分:1)

public class MyScreen extends MainScreen{
private int currentValue = 0;
String result; // Declare the result
public MyScreen() {
    LabelField lblField = new LabelField();
    lblField.setText("Current Value = " + currentValue);

    ButtonField btnPopup = new ButtonField("Show Popup");
    btnPopup.setChangeListener(new FieldChangeListener() {

        public void fieldChanged(Field field, int context) {
            UiApplication.getUiApplication().pushScreen(new MyPopupScreen());
        }
    });
    ButtonField btnGetResult = new ButtonField("result");      //Add new Button
    btnGetResult.setChangeListener(new FieldChangeListener() {

        public void fieldChanged(Field field, int context) {
           Dialog.inform(result);
        }
    });
    add(lblField);
    add(btnPopup);
    add(btnGetResult);// Add button to get the selected index
}

public class MyPopupScreen extends PopupScreen implements FieldChangeListener {
    private int currentValue = -1;
    RadioButtonField radio;
    public MyPopupScreen() {
        super(new VerticalFieldManager(VerticalFieldManager.VERTICAL_SCROLL|VerticalFieldManager.VERTICAL_SCROLLBAR), Field.FOCUSABLE 

                );
        add(new LabelField("Select Chart Type"));

        final RadioButtonGroup radioGroup = new RadioButtonGroup();
        for (int i = 0; i < 10; i++) {
            radio = new RadioButtonField("Option no. " + i, radioGroup, false);
            radio.setChangeListener(this);
            add(radio);
        }

        ButtonField cancelBtn = new ButtonField("Close");
        ButtonField okBtn = new ButtonField("OK");
        add(okBtn);
        add(cancelBtn);

        cancelBtn.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                UiApplication.getUiApplication().popScreen(MyPopupScreen.this);
            }
        });
        okBtn.setChangeListener(new FieldChangeListener() {

            public void fieldChanged(Field field, int context) {
                result = radioGroup.getSelectedIndex()+"";
                UiApplication.getUiApplication().popScreen(MyPopupScreen.this);
            }
        });
    }

    public void fieldChanged(Field field, int context) {
        if (field instanceof RadioButtonField) {
            RadioButtonField radio = (RadioButtonField) field;
            currentValue = radio.getIndex();
        }
    }
}
}