Blackberry JDE FieldChangeListener - PullRequest
       18

Blackberry JDE FieldChangeListener

1 голос
/ 16 сентября 2009

Я немного сбит с толку относительно того, как реализовать FieldChangeListener в Blackberry JDE. Один способ - заставить мой основной класс реализовать FieldChangeListener, а затем создать внутри него метод с изменением поля, а другой - сделать:

    FieldChangeListener listenerUS = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
System.out.println("Something changed!");
pushScreen(_newScreen);
}
};

В любом случае, если я пытаюсь вызвать метод (например, pushScreen или пользовательский метод, который я написал), я получаю ошибку во время выполнения. В режиме отладки ни один из моих операторов печати не отображается, либо. Однако, если я удалю метод fieldChanged напрямую, он даже не скомпилируется, поэтому я "m pretty уверен, что он видит код?

Я добавил слушателя к кнопке, к которой я хочу подключить:

            but_temp.setChangeListener(this);

(в первом случае) или поставив listenerUS.

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

Имеет ли это смысл? Я просто совершенно не понимаю, как использовать слушателей на ежевике?

http://pastie.org/618950

Там есть копия моего кода в целом ...

Ответы [ 3 ]

1 голос
/ 16 сентября 2009

Я посмотрел на твой код, и ничего вопиющего не прыгнуло на меня. Тем не менее, я бы не назначил основной класс приложения обязанностями FieldChangeListener. Это не то, о чем нужно знать. Лучшее, что я могу для вас сделать, - предоставить пример приложения, реализующего интерфейс FieldChangeListener для ButtonField. Это не решение, но, возможно, благодаря лучшему знанию вашего кода вы сможете выбрать что-то отличное от этого примера. Надеюсь, это поможет.

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.FieldChangeListener;

/**
 * Test implementation of ButtonField.
 */
public class TestAppMain extends UiApplication 
{
    /**
     * Default Constructor.
     */
    private TestAppMain() {        
        pushScreen(new AppScreen());
    }

    /**
     * App entry point.
     * @param args Arguments.
     */
    public static void main(String[] args) {
        TestAppMain app = new TestAppMain();
        app.enterEventDispatcher();
    }

    /**
     * Main application screen.
     */
    private static class AppScreen extends MainScreen 
    {
        /**
         * Default constructor.
         */
        public AppScreen() {
            LabelField title = new LabelField("Button Test Demo",
                    LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
            setTitle(title);

            // Create a button with a field change listener.
            FieldChangeListener listener = new FieldChangeListener() {
                public void fieldChanged(Field field, int context) {
                    ButtonField buttonField = (ButtonField) field;
                    System.out.println("Button pressed: " + buttonField.getLabel());
                }
            };
            ButtonField buttonField = new ButtonField("Test Button", ButtonField.CONSUME_CLICK);            
            buttonField.setChangeListener(listener);
            add(buttonField);
        }               

        /**
         * Handle app closing.
         */
        public void close() {
            Dialog.alert("Goodbye!");
            System.exit(0);
            super.close();
        }
    }
}
0 голосов
/ 18 сентября 2009

Я очень запутался, но мне удалось все исправить. Я создал новый класс с нуля, а затем просто скопировал и вставил в него свой старый код. Все работает. Единственное, что я изменил, это импортировал только те классы, которые, по словам Eclipse, были необходимы (до того, как у меня были некоторые операторы импорта из различных учебных пособий и т. Д., Поэтому некоторые из них, возможно, не использовались).

Возможно ли, что я импортировал что-то, что вызывало сбой?

Я действительно предпочел бы, чтобы большая часть моего кода находилась на самом экране, но при попытке этого все закончится, прежде чем я смогу даже загрузить. Что-то в парсере xml, которым я пользуюсь, не радует.

http://pastie.org/621932

Там модифицированный код. Я действительно расстроен, потому что я знаю, что в этой рамочной работе есть какое-то неотъемлемое ПОНИМАНИЕ, что я не придираюсь, и что большинство моих проблем проистекает из этого. Я полагаю, что только практика поможет мне, хотя ^ _ ^ ;;

0 голосов
/ 17 сентября 2009

Я согласен с Fostah (+1), обычно реализовывать FieldChangeListener в Field, Manager или Screen или использовать автономный FieldChangeListener. Также, чтобы нажать / вытащить экран из поля:

UiApplication.getUiApplication().pushScreen(nextScreen);

См. Как вернуться к предыдущему экрану в эмуляторе Blackberry?

...