Domanda

Sono un po 'confuso su come implementare un FieldChangeListener nel JDE Blackberry. In un modo ho fatto in modo che la mia classe principale implementasse FieldChangeListener, e poi avessi un metodo modificato in esso al suo interno, e un altro me lo ha fatto:

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

Ad ogni modo, se provo a chiamare un metodo (come pushScreen o un metodo personalizzato che ho scritto), ottengo un errore di runtime. In modalità debug, nessuna delle mie dichiarazioni di stampa viene visualizzata. Tuttavia, se rimuovo il metodo fieldChanged in modo definitivo, non verrà nemmeno compilato, quindi sono piuttosto sicuro che sta vedendo il codice?

Ho aggiunto l'ascoltatore al pulsante a cui voglio che sia collegato avendo:

            but_temp.setChangeListener(this);

(nel primo caso) o mettendo listenerUS.

Tutto sembra essere collegato, ma delle mie dichiarazioni di stampa vengono visualizzate e se chiamo un metodo, viene visualizzato un errore di runtime.

Ha senso? Sono solo completamente confuso su come usare gli ascoltatori sul blackberry?

http://pastie.org/618950

C'è una copia del mio codice nel suo insieme ...

È stato utile?

Soluzione 3

Sono super confuso, ma sono riuscito a sistemare le cose. Ho creato una nuova classe da zero, quindi ho appena copiato e incollato il mio vecchio codice. Tutto funziona. L'unica cosa che ho cambiato è stata solo l'importazione delle classi che Eclipse ha dichiarato necessarie (prima che avessi alcune dichiarazioni di importazione da vari tutorial, ecc., Quindi alcune potrebbero non essere utilizzate.)

È possibile che stavo importando qualcosa che causava l'arresto anomalo delle cose?

Preferirei avere la maggior parte del mio codice nello schermo stesso, ma provando a farlo si blocca il tutto prima ancora di poterlo caricare. Qualcosa sul parser XML che sto usando non è felice.

http://pastie.org/621932

C'è il codice modificato. Sono davvero frustrato, perché so che c'è qualcosa di intrinseco di COMPRENSIONE di questo lavoro sul telaio che non sto facendo trekking, e che la maggior parte dei miei problemi deriva da questo. Suppongo che solo la pratica mi aiuterà, sebbene ^ _ ^ ;;

Altri suggerimenti

Ho guardato il tuo codice e niente di palesemente sbagliato mi è saltato fuori. Tuttavia, non desidero designare la principale classe di applicazione con il compito di essere FieldChangeListener. Non è qualcosa di cui dovrebbe essere consapevole. Il meglio che posso fare per te è fornire un'app di esempio che implementa l'interfaccia FieldChangeListener per ButtonField. Non è una soluzione ma forse con la tua migliore conoscenza del tuo codice sarai in grado di scegliere qualcosa di diverso da questo esempio. Spero che sia d'aiuto.

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

Sono d'accordo con Fostah (+1), è comune implementare FieldChangeListener in Field, Manager o Screen o utilizzare un FieldChangeListener autonomo.
Inoltre, per spingere / estrarre lo schermo dal campo:

UiApplication.getUiApplication().pushScreen(nextScreen);

Vedi Come tornare indietro alla schermata precedente nell'emulatore Blackberry?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top