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