Pergunta

Eu sou uma espécie de confuso a respeito de como implementar um FieldChangeListener no BlackBerry JDE. Uma forma tem-me fazer o meu principal classe implementar FieldChangeListener, e depois ter um método dentro fieldchanged dele, e outro tem me fazer:

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

De qualquer maneira, se eu tentar chamar um método (como pushScreen, ou um método personalizado que eu escrevi), recebo um erro de execução. No modo de depuração, nenhuma das minhas declarações de impressão estão sendo exibidos, também. No entanto, se eu remover o método fieldChanged outright, ele não vai mesmo compilar, então eu "m muito se ele está vendo o código?

Eu adicionei o ouvinte para o botão eu quero que ele ligado a um ou outro por ter:

            but_temp.setChangeListener(this);

(no primeiro caso) ou colocando listenerUS.

Tudo parece ser ligado, mas das minhas declarações de impressão aparecer, e se eu chamar um método, eu recebo um erro de execução.

Isso faz sentido? Am I apenas completamente confusos sobre como usar os ouvintes sobre o blackberry?

http://pastie.org/618950

Há uma cópia do meu código como um todo ...

Foi útil?

Solução 3

Eu estou super confuso, mas eu consegui consertar as coisas. Eu criei uma nova classe a partir do zero, e depois é só copiar e colar meu código antigo para ele. Tudo funciona. A única coisa que mudou foi única importação classes que Eclipse disse era necessário (antes que eu tivesse algumas declarações de importação de vários tutoriais, etc, para alguns não foram possivelmente sendo usado.)

É possível que eu estava importando algo que estava causando coisas a falhar?

Eu realmente preferiria ter mais do meu código na própria tela, mas tentando que trava a coisa toda antes que eu possa mesmo carregar. Algo sobre o analisador xml Estou usando não ser feliz.

http://pastie.org/621932

Há o código modificado. Estou muito frustrado, porque eu sei que há alguma compreensão inerente deste trabalho quadro que eu não estou grokking, e que a maioria dos meus problemas são provenientes desta. Acho que só a prática vai me ajudar, embora ^ _ ^ ;;

Outras dicas

Eu olhei para o seu código e nada flagrantemente errado saltou fora de mim. No entanto, eu não iria designar a principal classe de aplicação dos deveres de ser o FieldChangeListener. Não é algo que deve ter que estar ciente. O melhor que posso fazer por você é dar um exemplo aplicativo que implementa a interface FieldChangeListener para um ButtonField. Não é uma solução, mas talvez com o seu melhor conhecimento do seu código, você vai ser capaz de escolher algo que é diferente do que este exemplo. Espero que ajude.

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

Eu concordo com Fostah (+1), é comum para implementar FieldChangeListener no campo, Manager ou tela, ou usar um autônomo FieldChangeListener.
Além disso, para empurrar / puxar tela de campo:

UiApplication.getUiApplication().pushScreen(nextScreen);

Como volta navegar para a tela anterior no emulador Blackberry?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top