在Blackberry中将字段值从弹出式屏幕返回到主屏幕

在Blackberry中将字段值从弹出式屏幕返回到主屏幕,blackberry,Blackberry,现在我有了一个MyScreen,它从包含一个按钮的主屏幕扩展而来。单击按钮时,将显示弹出式屏幕,其中包含RadioButtonFields、OK和Cancel按钮的列表。我的问题是如何将RadioButtonField值从PopupScreen返回到MyScreen 请帮我解决这个问题 谢谢 下面是我的代码 MyScreen.java public class MyScreen extends MainScreen{ private int currentValue = 0;

现在我有了一个MyScreen,它从包含一个按钮的主屏幕扩展而来。单击按钮时,将显示弹出式屏幕,其中包含RadioButtonFields、OK和Cancel按钮的列表。我的问题是如何将RadioButtonField值从PopupScreen返回到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);

    }
}
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 );
    }
}
public interface MyListener {
    public void valueChanged(int selectedIdx);
}
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());


            }
        });
    }


}
mypop屏幕上方

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();
        }
    }
}
公共类MyPopupScreen扩展PopupScreen实现FieldChangeListener{
私有int currentValue=-1;
公共MyPopupScreen(){
超级(新的VerticalFieldManager(VerticalFieldManager.VerticalFieldManager.VerticalFieldManager.VerticalFieldManager.VerticalFieldManager.VerticalScrollbar),Field.FOCUSABLE
);
添加(新LabelField(“选择图表类型”);
RadioButtonGroup radioGroup=新RadioButtonGroup();
对于(int i=0;i<10;i++){
RadioButtonField radio=新RadioButtonField(“选项号”+i,放射组,假);
radio.setChangeListener(this);
添加(收音机);
}
按钮字段取消BTN=新按钮字段(“关闭”);
按钮字段okBtn=新按钮字段(“OK”);
添加(okBtn);
添加(取消BTN);
cancelBtn.setChangeListener(新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
UiApplication.getUiApplication().popScreen();
}
});
okBtn.setChangeListener(新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
//如何获取要传回MyScreen的广播值或索引值
}
});
}
公共无效字段已更改(字段,int上下文){
if(RadioButtonField的字段实例){
RadioButtonField radio=(RadioButtonField)字段;
currentValue=radio.getIndex();
}
}
}
公共类MyScreen扩展了主屏幕{
私有int currentValue=0;
String result;//声明结果
公共MyScreen(){
LabelField lblField=新的LabelField();
lblField.setText(“当前值=“+currentValue”);
按钮字段btnPopup=新按钮字段(“显示弹出窗口”);
btnPopup.setChangeListener(新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
UiApplication.getUiApplication().pushScreen(新的MyPopupScreen());
}
});
ButtonField btnGetResult=新按钮字段(“结果”);//添加新按钮
btnGetResult.setChangeListener(新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
对话。通知(结果);
}
});
添加(lblField);
添加(btnPopup);
add(btnGetResult);//添加按钮以获取所选索引
}
公共类MyPopupScreen扩展了PopupScreen实现了FieldChangeListener{
私有int currentValue=-1;
无线电现场无线电;
公共MyPopupScreen(){
超级(新的VerticalFieldManager(VerticalFieldManager.VerticalFieldManager.VerticalFieldManager.VerticalFieldManager.VerticalFieldManager.VerticalScrollbar),Field.FOCUSABLE
);
添加(新LabelField(“选择图表类型”);
最终RadioButtonGroup radioGroup=新RadioButtonGroup();
对于(int i=0;i<10;i++){
radio=新RadioButton字段(“选项号”+i,放射组,假);
radio.setChangeListener(this);
添加(收音机);
}
按钮字段取消BTN=新按钮字段(“关闭”);
按钮字段okBtn=新按钮字段(“OK”);
添加(okBtn);
添加(取消BTN);
cancelBtn.setChangeListener(新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
UiApplication.getUiApplication().popScreen(MyPopupScreen.this);
}
});
okBtn.setChangeListener(新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
结果=放射组。getSelectedIndex()+“”;
UiApplication.getUiApplication().popScreen(MyPopupScreen.this);
}
});
}
公共无效字段已更改(字段,int上下文){
if(RadioButtonField的字段实例){
RadioButtonField radio=(RadioButtonField)字段;
currentValue=radio.getIndex();
}
}
}
}

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

试着理解下面的代码,并使用任何对您有效的方法

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

    }
}
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 );
    }
}
public interface MyListener {
    public void valueChanged(int selectedIdx);
}
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());


            }
        });
    }


}
MyListener.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);

    }
}
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 );
    }
}
public interface MyListener {
    public void valueChanged(int selectedIdx);
}
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());


            }
        });
    }


}
MyPopupScreen.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);

    }
}
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 );
    }
}
public interface MyListener {
    public void valueChanged(int selectedIdx);
}
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());


            }
        });
    }


}

把你的密码放进去。我刚刚更新了我的密码来回答我的问题。请帮帮我,谢谢你的帮助reply@OneCart.. 用另一种方法找到答案。我已经在那一行添加了修改和评论。输入此代码,您将获得所选索引。这很好,谢谢@vijay.jangid07,谢谢您的帮助。但是如果我不使用内部类的话(在我的情况下)会更好谢谢Neel。这样,我的问题就解决了,代码也更清晰了