0

MainScreenにButtonFieldがあり、そこからObjectListfieldを追加したPopupScreenをプッシュしています。私がやりたいのは、PopupScreenのObjectListfieldから選択された要素でMainScreenのButtonFieldのラベルを更新することです。

クラスを使わずにできるかどうか(クラスではなくDialog本当に使いたい)とその方法を教えてください。サンプルコードを提供していただければ幸いです。PopupScreenDialog

コードを追加しました。

public final class MyScreen extends MainScreen {
    HorizontalFieldManager hfm;
    ButtonField btn;
    public MyScreen() {        
        // Set the displayed title of the screen       
        super();
        setTitle("MyTitle");


        btn = new ButtonField("label",ButtonField.CONSUME_CLICK);
        final mypopup mps = new mypopup();

        btn.setChangeListener(new FieldChangeListener() {
            public void fieldChanged(Field field,int context) {     
                UiApplication.getUiApplication().pushModalScreen(mps);      
            }
        });

        hfm = new HorizontalFieldManager();
        hfm.add(btn);
        add(hfm);
    }

    public void setlabel(String labelnew) {
        btn.setLabel(labelnew);
    }

    public String getlabel() {
        return this.btn.getLabel();
    }
}

class mypopup extends PopupScreen implements FieldChangeListener {

    String it;

    ObjectListField obj = new ObjectListField() {
        public boolean navigationClick(int status,int time) {
            int selectedindex=obj.getSelectedIndex();
            it=(String)obj.get(obj, selectedindex);

            UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());

            /*MyScreen my=new MyScreen();
            my.btn.setLabel(it);
            my.invalidate(); */
            //close();

            UiApplication.getUiApplication().invokeLater(new Runnable() {
                public void run() {
                    /* This im doing to see that setlabel and getlabel are
                                working properly */     
                    MyScreen my=new MyScreen(); 
                    my.setlabel(it);                 
                    String gt=my.getlabel();     
                    Dialog.alert(gt);            
                    my.hfm.invalidate();                             

                        //the label of button is changed but not updating in mainscreen.
                            }
            });

            return true;        
        }
    };

    public mypopup() {
        super(new VerticalFieldManager());

        String[] type=new String[] {"a","b","c","d"};
        obj.set(type);
        add(obj);       
     }

    public void fieldChanged(Field field, int context) {
        // TODO Auto-generated method stub
    }

} 
4

2 に答える 2

0

1つのマネージャーにボタンを追加し、ボタンにHorizontalFieldManager or VerticalFieldManagerテキストを設定した後、このようにマネージャーを無効にします

public final class MyScreen extends MainScreen
{

  ButtonField btn;
  public MyScreen()
 {        
// Set the displayed title of the screen       
super();
setTitle("MyTitle");


btn=new ButtonField("label",ButtonField.CONSUME_CLICK);
final mypopup mps=new mypopup();

btn.setChangeListener(new FieldChangeListener()
{
    public void fieldChanged(Field field,int context){

        UiApplication.getUiApplication().pushModalScreen(mps);

    }
});

HorizontalFieldManager hfmToholdButtons = new HorizontalFieldManager();
btn.setLabel(mps.gettext());
hfmToholdButtons.add(btn);
hfmToholdButtons.invalidate();
}
}
于 2012-08-07T11:45:59.223 に答える
0

次のコードブロックを変更する必要があります。

MyScreen my = new MyScreen();
my.setlabel(it);
String gt = my.getlabel();
Dialog.alert(gt);
my.hfm.invalidate();

コードブロックを使用すると、

Screen scr = UiApplication.getUiApplication().getActiveScreen();
if (scr instanceof MyScreen) {
    MyScreen my = (MyScreen) scr;
    my.setlabel(it);
    my.invalidate();
}
于 2012-08-07T14:46:35.003 に答える