Pregunta

Estoy un poco confundido sobre cómo implementar un FieldChangeListener en Blackberry JDE. Una forma me hace hacer que mi clase principal implemente FieldChangeListener, y luego tengo un método de cambio de campo dentro de ella, y otra me tiene que hacer:

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

De cualquier manera, si trato de llamar a un método (como pushScreen o un método personalizado que he escrito), obtengo un error de tiempo de ejecución. En el modo de depuración, tampoco se muestran mis declaraciones de impresión. Sin embargo, si elimino el método fieldChanged directamente, ni siquiera se compilará, por lo que estoy seguro de que está viendo el código.

Agregué el oyente al botón al que quiero conectarlo ya que tengo:

            but_temp.setChangeListener(this);

(en el primer caso) o colocando listenerUS.

Todo parece estar conectado, pero de mis declaraciones de impresión aparecen, y si llamo a un método, obtengo un error de tiempo de ejecución.

¿Tiene sentido? ¿Estoy completamente confundido acerca de cómo usar oyentes en el blackberry?

http://pastie.org/618950

Hay una copia de mi código en su conjunto ...

¿Fue útil?

Solución 3

Estoy súper confundido, pero logré arreglar las cosas. Creé una nueva clase desde cero, y luego simplemente copié y pegué mi código anterior. Todo funciona. Lo único que cambié fue solo importar clases que Eclipse dijo que eran necesarias (antes de tener algunas declaraciones de importación de varios tutoriales, etc., por lo que algunas posiblemente no se usaban).

¿Es posible que estuviera importando algo que causaba que las cosas se bloqueen?

Realmente preferiría tener la mayor parte de mi código en la pantalla, pero intentarlo bloquea todo antes de que pueda cargarlo. Algo sobre el analizador xml que estoy usando no es feliz.

http://pastie.org/621932

Ahí está el código modificado. Estoy realmente frustrado, porque sé que hay un ENTENDIMIENTO inherente de este marco de trabajo que no estoy asimilando, y que la mayoría de mis problemas provienen de esto. Supongo que solo la práctica me ayudará, aunque ^ _ ^ ;;

Otros consejos

Miré tu código y nada descaradamente malo me llamó la atención. Sin embargo, no designaría a la clase de aplicación principal las funciones de ser FieldChangeListener. No es algo que deba tener en cuenta. Lo mejor que puedo hacer por usted es proporcionar una aplicación de ejemplo que implemente la interfaz FieldChangeListener para un ButtonField. No es una solución, pero quizás con su mejor conocimiento de su código podrá elegir algo diferente a este ejemplo. Espero que ayude.

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

Estoy de acuerdo con Fostah (+1), es común implementar FieldChangeListener en Field, Manager o Screen, o usar un FieldChangeListener independiente.
Además, para empujar / tirar de la pantalla desde el campo:

UiApplication.getUiApplication().pushScreen(nextScreen);

Ver Cómo navegar hacia atrás a la pantalla anterior en el emulador de Blackberry?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top