Открыть новый главный экран на главном экране в blackberry

#blackberry #uiapplication

#ежевика #uiapplication

Вопрос:

Я создаю приложение, в котором есть несколько вкладок, при каждом нажатии на которые вызывается URL-адрес и анализируется онлайн-xml. Отображаются данные из этого XML-файла. Проблема в том, что при удалении данных вкладки исчезают и появляются только тогда, когда я нажимаю кнопку «Назад» симулятора. Тогда как данные должны отображаться под вкладками.

Пожалуйста, помогите

Мой пользовательский интерфейс

 public class TabControl extends UiApplication {

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

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

private class TabControlScreen extends MainScreen implements FocusChangeListener {

    private Bitmap backgroundBitmap = Bitmap.getBitmapResource("rednavnar.png");

    private LabelField tab1;
    private LabelField tab2;
    private LabelField tab3;


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

    public TabControlScreen() {

        LabelField appTitle = new LabelField("Energy", LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH | LabelField.FIELD_HCENTER);
        this.setTitle(appTitle);

        HorizontalFieldManager hManager = new HorizontalFieldManager( Manager.HORIZONTAL_SCROLL | Manager.HORIZONTAL_SCROLLBAR | Manager.USE_ALL_WIDTH | Manager.TOPMOST) {

            // Override the paint method to draw the background image.
            public void paint(Graphics graphics) {
                // Draw the background image and then call paint.
                graphics.drawBitmap(0, 0, 700, 100, backgroundBitmap, 0, 0);
                super.paint(graphics);
            }
        };
        tab1 = new LabelField("Top News", LabelField.FOCUSABLE | LabelField.HIGHLIGHT_FOCUS){
            protected boolean navigationClick(int status,int time){
                tabArea = displayTab1();
                return true;
            }
        };
        LabelField separator = new LabelField("|", LabelField.NON_FOCUSABLE);
        tab2 = new LabelField("Power", LabelField.FOCUSABLE | LabelField.HIGHLIGHT_FOCUS){
            protected boolean navigationClick(int status,int time){
                tabArea = displayTab2();
                return true;
            }
        };
        LabelField separator1 = new LabelField("|", LabelField.NON_FOCUSABLE);
        tab3 = new LabelField("Renewable Energy", LabelField.FOCUSABLE | LabelField.HIGHLIGHT_FOCUS){
            protected boolean navigationClick(int status,int time){
                tabArea = displayTab3();
                return true;
            }
        };


        tab1.setFocusListener(this);
        tab2.setFocusListener(this);
        tab3.setFocusListener(this);

        hManager.add(tab1);
        hManager.add(separator);
        hManager.add(tab2);
        hManager.add(separator1);
        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) {
                    delete(tabArea);
                    tabArea = displayTab1();
                    add(tabArea);
                } else if (field == tab2) {
                    delete(tabArea);
                    tabArea = displayTab2();
                    add(tabArea);
                } else if (field == tab3) {
                    delete(tabArea);
                    tabArea = displayTab3();
                    add(tabArea);
                }
            }
        }
    }

    public VerticalFieldManager displayTab1() {

        UiApplication.getUiApplication().pushScreen(new News());
        return tab1Manager;
    }

    public VerticalFieldManager displayTab2() {

        UiApplication.getUiApplication().pushScreen(new Power());
        return tab2Manager;
    }

    public VerticalFieldManager displayTab3() {

        UiApplication.getUiApplication().pushScreen(new Energy());
        return tab3Manager;
    }

}
}
  

Главный экран моих новостей

 public class News extends MainScreen {
public News() {

    String xmlUrl = "http://182.71.5.53:9090/solr/core4/select/?q=*";

    String[][] urlData = XmlFunctions.getURLFromXml(xmlUrl);
    for (int i = 0; i < urlData.length; i  ) {
        final String title = urlData[0][i];
        final String id = urlData[1][i];
        //add(new LinkLabel(title, i));
        add(new RichTextField(title){
            protected boolean navigationClick(int status,int time){

                String cId = id;
                String bodyUrl = "http://192.168.1.44:9090/solr/core0/select/?q=" cId ";
                String[][] bodyData = XmlFunctions.getBodyFromXml(bodyUrl);
                for(int j=0;j<bodyData.length;j  ){
                    String body = bodyData[0][j];
                    add(new RichTextField(body));
                }
                return true;
            }
        });
        add(new SeparatorField());
    }
}
}
  

Теперь я хочу открыть этот экран новостей под вкладками
Пожалуйста, помогите

Ответ №1:

Для вашего класса TabControl

 public class TabControl extends UiApplication {

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

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

    private class TabControlScreen extends MainScreen {

        private Bitmap backgroundBitmap = Bitmap.getBitmapResource("rednavnar.png");

        private LabelField tab1;
        private LabelField tab2;
        private LabelField tab3;

        private VerticalFieldManager tabArea;

        public TabControlScreen() {

            LabelField appTitle = new LabelField("Energy", LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH | LabelField.FIELD_HCENTER);
            this.setTitle(appTitle);

            HorizontalFieldManager hManager = new HorizontalFieldManager( Manager.HORIZONTAL_SCROLL | Manager.HORIZONTAL_SCROLLBAR | Manager.USE_ALL_WIDTH | Manager.TOPMOST) {

                // Override the paint method to draw the background image.
                public void paint(Graphics graphics) {
                    // Draw the background image and then call paint.
                    graphics.drawBitmap(0, 0, 700, 100, backgroundBitmap, 0, 0);
                    super.paint(graphics);
                }
            };
            tab1 = new LabelField("Top News", LabelField.FOCUSABLE | LabelField.HIGHLIGHT_FOCUS){
                protected boolean navigationClick(int status,int time){
                    delete(tabArea);
                    tabArea = displayTab1();
                    add(tabArea);
                    return true;
                }
            };
            LabelField separator = new LabelField("|", LabelField.NON_FOCUSABLE);
            tab2 = new LabelField("Power", LabelField.FOCUSABLE | LabelField.HIGHLIGHT_FOCUS){
                protected boolean navigationClick(int status,int time){
                    delete(tabArea);
                    tabArea = displayTab2();
                    add(tabArea);
                    return true;
                }
            };
            LabelField separator1 = new LabelField("|", LabelField.NON_FOCUSABLE);
            tab3 = new LabelField("Renewable Energy", LabelField.FOCUSABLE | LabelField.HIGHLIGHT_FOCUS){
                protected boolean navigationClick(int status,int time){
                    delete(tabArea);
                    tabArea = displayTab3();
                    add(tabArea);
                    return true;
                }
            };

            hManager.add(tab1);
            hManager.add(separator);
            hManager.add(tab2);
            hManager.add(separator1);
            hManager.add(tab3);

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

            // USELESS CODE HAS BEEN REMOVED    

            tabArea = displayTab1();
            add(tabArea);

        }

        public VerticalFieldManager displayTab1() {
            return new News(); // RETURN THE MANAGER DIRECTLY
        }

        public VerticalFieldManager displayTab2() {
            return new Power(); // RETURN THE MANAGER DIRECTLY
        }

        public VerticalFieldManager displayTab3() {
            return new Energy(); // RETURN THE MANAGER DIRECTLY
        }
    }
 }
  

Для вашего класса новостей

 public class News extends VerticalFieldManager { // CHANGING THE EXTENSION SUPER CLASS 
    public News() {
        super(VerticalFieldManager.VERTICAL_SCROLL|VerticalFieldManager.VERTICAL_SCROLLBAR);

        String xmlUrl = "http://182.71.5.53:9090/solr/core4/select/?q=*";

        String[][] urlData = XmlFunctions.getURLFromXml(xmlUrl);
        for (int i = 0; i < urlData.length; i  ) {
            final String title = urlData[0][i];
            final String id = urlData[1][i];
            //add(new LinkLabel(title, i));
            add(new RichTextField(title){
                protected boolean navigationClick(int status,int time){

                    String cId = id;
                    String bodyUrl = "http://192.168.1.44:9090/solr/core0/select/?q=" cId ";
                    String[][] bodyData = XmlFunctions.getBodyFromXml(bodyUrl);
                    for(int j=0;j<bodyData.length;j  ){
                        String body = bodyData[0][j];
                        add(new RichTextField(body));
                    }
                    return true;
                }
            });
            add(new SeparatorField());
        }
    }
}
  

Комментарии:

1. Ашраф: Огромное спасибо. У меня есть еще один вопрос в том же приложении, когда я перемещаюсь по вкладкам, вкладки меняются только при фокусировке, тогда как я хочу менять вкладки только по щелчку. Можете ли вы помочь

2. если вы хотите сценарий, как вы сказали в своем последнем комментарии, просто прокомментируйте метод «focusChanged» и его реализацию.

3. Ашраф: Извините, что снова и снова доставаю вас, я удалил метод » Focususchanged «, как вы сказали, но теперь данные только первой вкладки отображаются на всех вкладках, независимо от того, нажимаю я на другие вкладки или нет. любая работа вокруг этого будет полезна

4. Ашраф: Большое спасибо за вашу помощь. Теперь он работает нормально. Еще раз спасибо 🙂

Ответ №2:

Да, создайте отдельный главный экран или объекты экрана, и с вашего родительского экрана вы можете выполнить приведенный ниже код, чтобы открыть новый экран, используя приведенный ниже код:

 UIApplication.getUiApplication().pushScreen(your custom screen object);
  

Спасибо

Комментарии:

1. Hitesh: Спасибо, приятель, за помощь, но я уже пробовал это, и это открывает новый экран

Ответ №3:

Вам не нужно создавать 2 главных экрана в описанном вами сценарии.
Просто создайте VerticalFieldManager, добавьте его на главный экран, затем добавьте к нему содержимое.

Вот пример кода, который может вам помочь, примените его в вашем конструкторе главного экрана.

 VerticalFieldManager VFM_Content = new VerticalFieldManager();
add(VFM_Content);
VFM_Content.add(/*put content here embedded in any field type you prefer*/);
  

Комментарии:

1. Ашраф: я не могу полностью понять. я добавляю фрагмент своего кода, пожалуйста, взгляните

2. Хорошо, я получил то, что вам нужно, я отправлю вам исправленный код с некоторыми изменениями отправленного вами кода

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