문제

나는 BlackBerry JDE에서 FieldChangelistener를 구현하는 방법에 대해 혼란스러워합니다. 한 가지 방법은 내가 주 클래스를 FieldChangelistener를 구현 한 다음 내부에 전류적 인 방법을 가지고 있으며 다른 방법은 다음과 같습니다.

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

어느 쪽이든, 푸시 스크린 또는 내가 작성한 사용자 정의 메소드와 같은 메소드를 호출하려고하면 런타임 오류가 발생합니다. 디버그 모드에서는 내 인쇄문도 표시되지 않습니다. 그러나 Fieldchanged 메소드를 완전히 제거하면 컴파일되지 않아서 "M" 예쁜 확실히 코드를보고 있습니까?

리스너를 버튼에 추가했습니다.

            but_temp.setChangeListener(this);

(첫 번째 경우) 또는 리스너 루스를 넣어.

모든 것이 연결되어있는 것처럼 보이지만 인쇄문이 나타나고 메소드를 호출하면 런타임 오류가 발생합니다.

이게 말이 되요? 블랙 베리에서 청취자를 사용하는 방법에 대해 완전히 혼란 스럽습니까?

http://pastie.org/618950

내 코드 전체가 있습니다 ...

도움이 되었습니까?

해결책 3

나는 매우 혼란 스러웠지만 물건을 고칠 수있었습니다. 나는 처음부터 새로운 수업을 만들었고, 그냥 내 오래된 코드를 복사하고 붙여 넣었습니다. 모든 것이 작동합니다. 내가 변경 한 유일한 것은 Eclipse가 필요하다고 말한 클래스를 가져 오는 것뿐이었습니다 (다양한 튜토리얼 등의 수입 진술을하기 전에 일부는 사용되지 않았을 것입니다.)

물건이 충돌하는 것을 가져올 수 있었습니까?

나는 실제로 화면 자체에 대부분의 코드를 갖고 싶지만로드하기 전에 모든 것을 충돌시킨다. XML 파서에 대한 내용은 행복하지 않습니다.

http://pastie.org/621932

수정 된 코드가 있습니다. 나는이 프레임 작업에 대한 고유 한 이해가 내가 grokking하지 않는다는 것을 알고 있기 때문에 정말 실망스럽고, 대부분의 문제가 이것에서 나온다는 것을 알고 있기 때문입니다. ^_ ^;;

다른 팁

나는 당신의 코드를 보았고 나에게 끔찍하게 잘못된 것은 없습니다. 그러나 나는 주요 응용 프로그램 클래스에 FieldChangelistener의 의무를 지정하지 않을 것입니다. 알아야 할 것이 아닙니다. 내가 당신을 위해 할 수있는 최선은 버튼 필드의 FieldChangelistener 인터페이스를 구현하는 예제 앱을 제공하는 것입니다. 솔루션은 아니지만 코드에 대한 더 나은 지식을 사용하면이 예와 다른 것을 선택할 수 있습니다. 도움이되기를 바랍니다.

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

Fostah (+1)에 동의합니다. Field, Manager 또는 Screen에서 FieldChangelistener를 구현하거나 독립형 FieldChangelistener를 사용하는 것이 일반적입니다.
또한 필드에서 스크린을 푸시/당기기 위해 :

UiApplication.getUiApplication().pushScreen(nextScreen);

보다 BlackBerry 에뮬레이터에서 이전 화면으로 다시 탐색하는 방법은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top