-2

まず、私の問題を理解してみてください。これに関連する質問が多すぎることはわかっていますが、私の場合は誰も働いていません。

なぜ私は知らないのですか、私のコードを見てください。

これは機能しています

    public final class MyScreen extends MainScreen implements FieldChangeListener
    {
        private combine enter_in;
        private manager_s ms , ms_1 ;
        private Bitmap img;
        LabelField lb_1 , lb_2 , lb_3 ;

        public MyScreen()
        {        
            setTitle("MyTitle");

            img = Bitmap.getBitmapResource("icon.png");
            //Bitmap img_1 = Bitmap.getBitmapResource("icon.png");

            enter_in = new combine ( Field.FOCUSABLE , img  );      
            enter_in.setChangeListener(this);



            ms = new manager_s( 0 , 4 );
            ms.add(enter_in);

            lb_1 = new LabelField("Menu") ;
            lb_2 = new LabelField("Favorites") ;
            lb_3 = new LabelField("Reserved") ;

            ms.add(lb_1);
            ms.add(lb_2);
            ms.add(lb_3);

            add(ms);

        }
    }

しかし、私がFieldChangedListenerを実装しているとき、その時点ms.delete(lb_1)では機能していませんが、機能していdelete(ms)ます。この問題の解決にご協力ください

    public void fieldChanged(Field field, int context) 
    {
        if ( field == enter_in )
        {
            ms.delete(lb_1);            
        }
    }

だから、私はそれを求めています、ms.delete(lb_1)がMyScreenクラスの下で機能しない理由があります。

これは、私がマネージャー(custom_manager)として使用している私のmanager_classであり、このマネージャーは、画面内にフィールドを追加するために、私のクラスによって拡張されています。

public class manager_s extends Manager
    {
        int col ;
        int w_1 = 20 ;

        protected manager_s(long style , int col )
        {
            super(style);
            this.col = col ;
        }
        protected void sublayout(int width, int height) 
        {

                for ( int i = 0 ; i < col ; i ++ )
                {
                    Field field = getField (i);

                    layoutChild( field , 130 , 100 );
                }

                for ( int i = 0 ; i < col ; i ++ )
                {
                    Field field = getField (i);

                    setPositionChild ( field , w_1 , 20 );

                    w_1 = w_1 + 135 ;

            setExtent ( width , 200  );
        }    
    }
}

エラーはINDEX_OUT_OF_BOUND_EXCEPTIONです。これは私の質問です。インターネット上のすべての人が(リソースとして)フィールドを削除すると言っているのですが、私の場合は何も機能していません。

4

1 に答える 1

0

これを試して -

    setTitle("MyTitle");
    final ButtonField enter_in=new ButtonField("enter_in");
    add(enter_in);

    lb_1 = new LabelField("Menu") ;
    lb_2 = new LabelField("Favorites") ;
    lb_3 = new LabelField("Reserved") ;

    final HorizontalFieldManager ms=new HorizontalFieldManager();
    ms.add(lb_1);
    lb_1.setMargin(0,50,0,0);//Here you can set the spacing between the Fields.
    ms.add(lb_2);
    lb_2.setMargin(0,50,0,0);//Here you can set the spacing between the Fields.
    ms.add(lb_3);

    add(ms);

    FieldChangeListener listener=new FieldChangeListener() {

        public void fieldChanged(Field field, int context) {
        if(field==enter_in){
            ms.delete(lb_1);
            ms.invalidate();

        }
        }
    };
    enter_in.setChangeListener(listener);

私の ButtonField の代わりに、あなたの組み合わせを使うことができます。

于 2012-12-18T12:13:41.103 に答える