2

私は BlackBerry でアプリケーションを開発していますが、私は初心者なので、実装方法がわかりません。

私のアプリケーションでは、タブを実装する必要があります。これには、pilButtonSet を使用しました。私のアプリケーションには 5 つのタブがあり、各タブには複雑なビューがあります。タブごとに異なる Java クラスを作成したいと考えています。

Android とTabActivity同様に、タブ間を簡単に移動できます。それでも、各タブのビューを設計していません。私はグーグルで検索していますが、成功していません。

私が心配しています; 1 つの画面にコード全体を記述する必要がありますか? ....そうでない場合、どこにタブを作成し、どのようにナビゲートする必要がありますか?

4

1 に答える 1

0

Take a look at this BlackBerry example from RIM. It's a bit old, but if you still have to support OS 5.0, it's a useful technique (see bottom of answer if you don't support OS 5.0).

From the description:

The basic approach is to use a set of Managers to control the sets of Fields that appear on the Screen when a tab has been selected. Tabs are implemented as focusable LabelFields, with a FocusChangeListener doing the Manager switch when focus changes. Fields and Managers are initialized once and maintained in memory to retain state changes between tabs.

The page has sample code to download, but to protect against any possible link rot, here's the most important part of the sample:

package com.rim.samples.tabcontrol;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FocusChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;

public class TabControl extends UiApplication {

        public TabControl() {
                TabControlScreen screen = new TabControlScreen();
                pushScreen(screen);
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                TabControl app = new TabControl();
                app.enterEventDispatcher();
        }

        private class TabControlScreen extends MainScreen implements FocusChangeListener {

                private LabelField tab1;
                private LabelField tab2;    
                private LabelField tab3;   
                private LabelField spacer1;   
                private LabelField spacer2;    
                private VerticalFieldManager tabArea;    
                private LabelField tab1Heading;    
                private BasicEditField tab1Field1;    
                private BasicEditField tab1Field2;    
                private LabelField tab2Heading;    
                private BasicEditField tab2Field1;    
                private BasicEditField tab2Field2;    
                private LabelField tab3Heading;    
                private BasicEditField tab3Field1;    
                private BasicEditField tab3Field2;

                private VerticalFieldManager tab1Manager;
                private VerticalFieldManager tab2Manager;
                private VerticalFieldManager tab3Manager;


                public TabControlScreen() {
                        HorizontalFieldManager hManager = new HorizontalFieldManager();
                        tab1 = new LabelField("Page 1", LabelField.FOCUSABLE);
                        tab2 = new LabelField("Page 2", LabelField.FOCUSABLE);
                        tab3 = new LabelField("Page 3", LabelField.FOCUSABLE);
                        spacer1 = new LabelField(" | ", LabelField.NON_FOCUSABLE);
                        spacer2 = new LabelField(" | ", LabelField.NON_FOCUSABLE);

                        tab1.setFocusListener(this);
                        tab2.setFocusListener(this);
                        tab3.setFocusListener(this);
                        hManager.add(tab1);
                        hManager.add(spacer1);
                        hManager.add(tab2);
                        hManager.add(spacer2);
                        hManager.add(tab3);

                        add(hManager);
                        add(new SeparatorField());

                        tab1Manager = new VerticalFieldManager();
                        tab2Manager = new VerticalFieldManager();
                        tab3Manager = new VerticalFieldManager();

                        tabArea = displayTab1();
                        add(tabArea);

                }

                public void focusChanged(Field field, int eventType) {
                        if (tabArea != null) {
                                if (eventType == FOCUS_GAINED) {
                                        if (field == tab1) {
                                                System.out.println("Switch to Tab 1");
                                                delete(tabArea);
                                                tabArea = displayTab1();
                                                add(tabArea);
                                        } else if (field == tab2) {
                                                System.out.println("Switch to Tab 2");
                                                System.out.println("Switch to Tab 1");
                                                delete(tabArea);
                                                tabArea = displayTab2();
                                                add(tabArea);
                                        } else if (field == tab3) {
                                                System.out.println("Switch to Tab 3");
                                                System.out.println("Switch to Tab 1");
                                                delete(tabArea);
                                                tabArea = displayTab3();
                                                add(tabArea);
                                        }
                                }
                        }

                }

                public VerticalFieldManager displayTab1() {
                        if (tab1Heading == null) {
                                tab1Heading = new LabelField("Registration");
                                tab1Manager.add(tab1Heading);
                        }
                        if (tab1Field1 == null) {
                                tab1Field1 = new BasicEditField("Username: ", "");
                                tab1Manager.add(tab1Field1);
                        }
                        if (tab1Field2 == null) {
                                tab1Field2 = new BasicEditField("Password: ", "");
                                tab1Manager.add(tab1Field2);
                        }
                        return tab1Manager;
                }

                public VerticalFieldManager displayTab2() {
                        if (tab2Heading == null) {
                                tab2Heading = new LabelField("Password Recovery");
                                tab2Manager.add(tab2Heading);
                        }
                        if (tab2Field1 == null) {
                                tab2Field1 = new BasicEditField("Security Question: ", "Mother's Maiden Name?");
                                tab2Manager.add(tab2Field1);
                        }
                        if (tab2Field2 == null) {
                                tab2Field2 = new BasicEditField("Password: ", "");
                                tab2Manager.add(tab2Field2);
                        }
                        return tab2Manager;
                }

                public VerticalFieldManager displayTab3() {
                        if (tab3Heading == null) {
                                tab3Heading = new LabelField("Interests");
                                tab3Manager.add(tab3Heading);
                        }
                        if (tab3Field1 == null) {
                                tab3Field1 = new BasicEditField("Hobbies: ", "");
                                tab3Manager.add(tab3Field1);
                        }
                        if (tab3Field2 == null) {
                                tab3Field2 = new BasicEditField("Memberships: ", "");
                                tab3Manager.add(tab3Field2);
                        }
                        return tab3Manager;
                }

        }

}

You said:

I want to create different java class for different tabs.

In your code, you can edit the methods named displayTab1(), displayTab2(), etc. to return a different class for each tab. Following the example exactly, each class would extend the VerticalFieldManager class. However, if your desired implementation isn't well setup for a VerticalFieldManager, you could certainly change the return value of those methods to just be the Manager base class, instead.

Just remember to change the tabArea member variable if you do that:

      private Manager tabArea;    

Note: if you only have to support OS 6.0 and above, you can also look into this newer API

于 2012-12-17T10:13:24.513 に答える