Вернуть значение поля с всплывающего экрана обратно на главный экран в Blackberry

#blackberry

#ежевика

Вопрос:

Теперь у меня есть MyScreen, который простирается от главного экрана, содержащего кнопку. При нажатии кнопки отобразится всплывающее окно, содержащее список полей RadioButtonFields, кнопок OK и Cancel. Мой вопрос в том, как вернуть значение 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();
        }
    }
}
  

Комментарии:

1. Поместите свой код. а также введите свой код всплывающего экрана.

2. Я только что обновил свой код на свой вопрос. Пожалуйста, помогите мне, спасибо за ваш ответ

3. @OneCart .. найдите ответ в другом подходе.

Ответ №1:

Как предположил Виджай, это один из способов, которым мы могли бы достичь этого, используя внутренний класс. Другим подходом может быть использование шаблонов проектирования design observer.

Попробуйте понять приведенный ниже код и используйте то, что когда-либо было эффективным для вас.

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. Спасибо, Нил. Таким образом, моя проблема решена, и код стал более понятным

Ответ №2:

 public class MyScreen extends MainScreen{
private int currentValue = 0;
String resu< // 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();
        }
    }
}
}
  

Комментарии:

1. Я внес изменения и добавил комментарий к этой строке. Введите этот код, и вы получите выбранный индекс.

2. Это хорошая работа, спасибо @vijay.jangid07, спасибо за вашу помощь. Но будет лучше (в моем случае), если я не буду использовать внутренний класс