1

Blackberry で複数の VerticalFieldManager を動的に作成するのに苦労しています。各 subManager は、異なるデータをユーザーに表示します。また、各 subManager は画面上で異なる位置になります。そこで、「mainManager」を持つクラスと「サブマネージャー」を作成する別のクラスを作成しmainManager.add(new TheClassExtendingVerticalFieldManager);、サブマネージャーを mainManager に追加するために呼び出します。問題は、サブマネージャーが 3 つではなく 1 つしか取得できないことです。マネージャーを区切るためにパディングを使用しています。これが私が使用しているコードです。正しい方向に私を導いてください、それは大歓迎です。

サブマネージャーを作成するクラス

public class ProgramListView extends VerticalFieldManager{

    private VerticalFieldManager subManager;
    private int _height;


    public ProgramListView(int height){
        this._height = height;

//      subManager = new VerticalFieldManager(
//              Manager.NO_HORIZONTAL_SCROLL | Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR | 
//              Manager.NO_HORIZONTAL_SCROLLBAR | Manager.USE_ALL_WIDTH)
//
//      {
//
//
//      };
    }

    public int get_height() {
        return _height;
    }

    public void set_height(int _height) {
        this._height = _height;
    }

    public void setCoordinates(int x, int y){
        setPosition(100,140);
    }
    protected void sublayout(int maxWidth, int maxHeight)
    {
        int displayWidth = Display.getWidth();
        int displayHeight = maxHeight;
        this.setPosition(300, 300);
        super.sublayout( 40, 40);
        setPadding(this.get_height(), 0, 0, 0);
        setExtent(displayWidth, this.get_height());

    }

    public void paint(Graphics graphics)
    {
        graphics.setBackgroundColor(Color.BLUE);//blue
        graphics.clear();
        super.paint(graphics);      
    }
    public int getPreferredWidth() {
        // TODO Auto-generated method stub
        return Display.getWidth();
    }

} 

mainManager クラス

public class ProgramLayout extends MainScreen {

    private HorizontalFieldManager mainManager;
    private int deviceWidth = Display.getWidth();
    private int deviceHeight = Display.getHeight();
    private Vector subManagers;
    private int theheight;

    public ProgramLayout(){

        setToolbar();
        subManagers = new Vector();
        theheight = 100;
        mainManager = new HorizontalFieldManager(Manager.VERTICAL_SCROLL | Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT)

        {

            protected void sublayout(int maxWidth, int maxHeight)
            {
                int displayWidth = deviceWidth;
                int displayHeight = deviceHeight;
                super.sublayout( displayWidth, displayHeight);
                setExtent(displayWidth, displayHeight);
            }

            public void paint(Graphics graphics)
            {
                graphics.setBackgroundColor(Color.BLACK);
                graphics.clear();
                super.paint(graphics);
            }

            public int getPreferredWidth() {
                // TODO Auto-generated method stub
                return Display.getWidth();
            }

        };
        for (int i = 0; i < 3; i++) {
            theheight = theheight+100;
            subManagers.addElement(new ProgramListView(theheight));
        }

        for (int i = 0; i < subManagers.size(); i++) {

            mainManager.add((VerticalFieldManager)subManagers.elementAt(i));
        }


        this.add(mainManager);

    }

前もって感謝します

4

2 に答える 2

0

Eugen Martynov が指摘したことを詳しく説明すると、 your mainManageris aHorizontalFieldManagerです。これは、 add() した順序で子フィールドを水平にレイアウトすることを意味します。への呼び出しの順序に基づいて、自動的にレイアウトを処理しますadd()

ただし、各子はのインスタンスでProgramListViewあり、getPreferredWidth() で Display.getWidth() を返します。

public int getPreferredWidth() {         
    // TODO Auto-generated method stub         
    return Display.getWidth();     
}

したがって、最初の 1 つは画面幅全体を占め、次の 2 つはその右側に配置する必要があります (ただし、既に画面幅全体を占めています)。

この 3 つProgramListViewsを縦に積み上げたかったのですか。次に、mainManagerに変更するだけVerticalFieldManagerです。を使用すると、3 つの異なる子フィールドをVerticalFieldManager呼び出すと、それらが自動的に垂直に配置されます。add()ProgramListView

于 2012-07-17T20:58:41.723 に答える
0

これを試して:

    for (int i = 0; i < 3; i++) {
        theheight = theheight+100;
         mainManager.add(new ProgramListView(theheight));
    }
    this.add(mainManager);
于 2012-07-17T13:13:27.290 に答える