Question

Je ne sais pas trop comment implémenter FieldChangeListener dans le JDE Blackberry. Une façon m'a amené ma classe principale à implémenter FieldChangeListener, puis une méthode fieldchanged à l'intérieur, et une autre m'a fait faire:

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

Quoi qu'il en soit, si j'essaie d'appeler une méthode (comme pushScreen ou une méthode personnalisée que j'ai écrite), j'obtiens une erreur d'exécution. En mode débogage, aucune de mes instructions d'impression n'est affichée non plus. Cependant, si je supprime complètement la méthode fieldChanged, elle ne sera même pas compilée. Je suis donc "assez" em> jolie pour être sûr de voir le code?

J'ai ajouté l'auditeur au bouton auquel je souhaite le connecter en ayant:

            but_temp.setChangeListener(this);

(dans le premier cas) ou en mettant listenerUS.

Tout semble être connecté, mais mes déclarations d'impression apparaissent et si j'appelle une méthode, une erreur d'exécution se produit.

Est-ce que cela a du sens? Suis-je tout simplement confus quant à l'utilisation des écouteurs sur un BlackBerry?

http://pastie.org/618950

Il y a une copie de mon code dans son ensemble ...

Était-ce utile?

La solution 3

Je suis super confus, mais j'ai réussi à arranger les choses. J'ai créé une nouvelle classe à partir de rien, puis j'ai simplement copié et collé mon ancien code dans celle-ci. Tout fonctionne. La seule chose que j'ai changée, c’est d’importer uniquement les classes dont Eclipse a déclaré qu’elles étaient nécessaires (avant d’avoir quelques déclarations d’import de divers tutoriels, etc., de sorte que certaines ne sont peut-être pas utilisées.)

Est-il possible que j'importais quelque chose qui provoquait un blocage?

Je préférerais vraiment que la plupart de mon code soit affiché à l'écran, mais essayer de le bloquer complètement avant même que je puisse le charger. Quelque chose à propos de l’analyseur XML que j’utilise n’est pas heureux.

http://pastie.org/621932

Il y a le code modifié. Je suis vraiment frustré, car je sais qu’il ya une certaine compréhension inhérente de ce travail de base que je ne rigole pas, et que la plupart de mes problèmes viennent de cela. Je suppose que seule la pratique m'aidera, bien que ^ _ ^ ;;

Autres conseils

J'ai regardé votre code et rien de vraiment flagrant ne m'a sauté aux yeux. Cependant, je ne désignerais pas la classe d'applications principale comme étant FieldChangeListener. Ce n'est pas quelque chose qu'il devrait être au courant. Le mieux que je puisse faire pour vous est de vous fournir un exemple d'application implémentant l'interface FieldChangeListener pour ButtonField. Ce n'est pas une solution, mais peut-être qu'avec une meilleure connaissance de votre code, vous pourrez choisir quelque chose de différent de cet exemple. J'espère que ça aide.

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();
        }
    }
}

Je suis d'accord avec Fostah (+1). Il est courant d'implémenter FieldChangeListener dans Field, Manager ou Screen, ou d'utiliser un FieldChangeListener autonome.
En outre, pour pousser / tirer l'écran de champ:

UiApplication.getUiApplication().pushScreen(nextScreen);

Voir Comment revenir en arrière à l'écran précédent de l'émulateur Blackberry?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top