Как вызвать конструктор главного экрана после закрытия всплывающего экрана - PullRequest
0 голосов
/ 21 марта 2012

Я вызываю всплывающее окно, где у меня есть поле выбора объекта, где я выбираю данные из выпадающего списка и устанавливаю значение в статической переменной.Мне нужно прочитать это значение в конструкторе главного экрана, из которого был вызван popupscreen.

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

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

Ascreen

Public AScreen(){
    String timezone_static = MyPopup.ocfDATA;
}
if (field == bitmapField1) {

    UiApplication.getUiApplication().pushScreen(new MyPopup(screen));

}

public class MyPopup extends PopupScreen {
    ObjectChoiceField ocf;
    NativeScreen deligate = null;
    public static String ocfDATA;

    public MyPopup(final NativeScreen deligate) {

        super(new VerticalFieldManager(), Field.FOCUSABLE);
        this.deligate = deligate;
        // 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();
                ocfDATA = str;
                deligate.valueChanged(str);
                Dialog.alert(str);
                close();
            }
        }
    }

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Я объясняю некоторые потоки, как перемещаться с одного экрана на другой экран со значениями.это простой способ на вашем главном экране

protected void onExposed() {
        String timezone_static = MyPopup.ocfDATA;
    }

в противном случае вы хотите узнать больше, чтобы перемещаться из одного места в другое, просто поймите следующий код

package mypackage;

import java.util.TimeZone;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.util.TimeZoneUtilities;

public final class MyScreen extends MainScreen implements FieldChangeListener
{
    private ButtonField btn;
    private LabelField zone_name;
    public MyScreen()
    { 
        //may be you have lots of parameters in constructers those all are in live state only design values you can delete

        CreateGui("Default Zone");// add all your design in this function 
    }
    public void CreateGui(String selcetd_time_zone)
    {
        setTitle(selcetd_time_zone);
        zone_name=new LabelField(selcetd_time_zone, Field.FOCUSABLE);
        btn=new ButtonField("select timezone",Field.FOCUSABLE);
        btn.setChangeListener(this);
        add(btn);
        add(zone_name);
    }
    public void ReloadScreenAccordingToNewZone(String zone_name)
    {
        synchronized (UiApplication.getEventLock()) {
            deleteAll();//clean your GUI
            invalidate();
            CreateGui(zone_name);
        }

    }
    public void fieldChanged(Field field, int context) {
        if(field==btn)
        {
             UiApplication.getUiApplication().pushScreen(new MyPopup(MyScreen.this));
        }
    }
}
class MyPopup extends PopupScreen implements FieldChangeListener{
    ObjectChoiceField ocf;
    MyScreen deligate = null;
    public MyPopup(MyScreen deligate) {
        super(new VerticalFieldManager(), Field.FOCUSABLE);
        this.deligate = deligate;
        TimeZone[] zone = TimeZoneUtilities.getAvailableTimeZones();
        ocf = new ObjectChoiceField("Set Timezone", zone);
        ocf.setChangeListener(this);
        add(ocf);
    }
    public void fieldChanged(Field field, int context) {
        if(field==ocf)
        {
            Object ob = ocf.getChoice(ocf.getSelectedIndex());
            deligate.ReloadScreenAccordingToNewZone(ob.toString());
            close();
        }

    }

}

Мое предложение заключается в том, что если выВы хотите обновить дизайн из другого класса, а затем просто отделить конструктор и дизайн

, как

. Все ваши проекты пишутся одним методом, предположим CreateGui ();вызовите этот метод из конструктора;если вы хотите перезагрузить дизайн обновлений, просто вызовите CreateGui из метода onExposed ()

0 голосов
/ 21 марта 2012

Ниже показан ваш экран.

  1. MainScreen
  2. PopupScreen

Когда вы закрываете PopupScreen, тогда onExposed() метод MainScreenбудет называться.

если передать String с PopupScreen на главный экран than you have to take one Статический variable in PopupScreen and setvalue of it .When u close Всплывающий экран than onExposed () method of Основной экран will be called. you have to access it as static way like that in onExposed () method. StringgetStringfromPopup = PopupScreen.yourStaticString; `

надеюсь, это поможет ...

0 голосов
/ 21 марта 2012
protected void onExposed()
{
     invalidate();
    //set your popup selected value at the palace where you want to set it

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...